SlideShare a Scribd company logo
1 of 23
サーバ異常検知~入門~ 2011.09.24 @mangantempy
自己紹介 ID : @mangantempy 職業: Webエンジニア 時系列分析 勉強中 最近ハマってるもの:Arduino
アジェンダ なにするの? サーバの監視方法 サンプルデータの作成 Rで分析 まとめ
なにするの? CPUやネットワーク、メモリ、ディスクなどの  サーバから得られるシステム情報を分析し、  異常を検知or予測することで  早期or事前に対応可能にします。 分析結果 システム情報 早期対応
サーバ監視の方法(基本) UNIX系のサーバで使える基本的なコマンド top…CPU、メモリの利用率、プロセスの稼動状況など iostat…デバイスのI/O性能 free…メモリとスワップ df…ディスクの使用状況 ifconfig…ネットワーク情報。トラフィック量エラーパケット数など netstat…ネットワーク統計や状態 ping…ネットワークの疎通確認
サーバ監視の方法(sysstat) sysstat(通称sar)が便利なのでオヌヌヌ! 色々なシステム情報をまとめて管理 送信/受信パケットに関する情報 エラーパケットなどに関する情報 CPU使用状況 ディスクI/Oの使用状況 メモリとスワップの使用状況 秒当たりのスワップイン/アウト処理情報 定期的に情報を取得してファイルに保存  ->過去に遡って調べられる
サンプルデータの作成 「df」コマンドを使用します。 $ df Filesystem           1K-ブロック    使用   使用可 使用% マウント位置 /dev/vzfs             83886080   4738368  79147712   6% / none                    262144         4    262140   1% /dev
こんな感じのシェルスクリプトを作って #!/bin/bash datetime=`date ‘+%F %H:%M’`# 日付 values=`df | awk‘/devvzfs/ {print $2“,”$3“,”$4}’`# 観測値 echo $datetime,$values# まとめて出力 cronで定期的に動かして、ログに保存 $ crontab -l * * * * * ~/df.sh >> ~/df.log 2> /dev/null 最初にヘッダを入れておくと良いかも $echo "datetime,blocks,used,available" > ~/df.log
でかいファイルを作る適当なバッチを動かしておく 結果はこんな感じ $ cat ~/df.log datetime,blocks,used,available 2011-09-24 06:06,83886080,4738280,79147800 2011-09-24 06:07,83886080,4738272,79147808 2011-09-24 06:08,83886080,4738280,79147800 2011-09-24 06:09,83886080,4738284,79147796 2011-09-24 06:10,83886080,4738296,79147784 2011-09-24 06:11,83886080,4738280,79147800 2011-09-24 06:12,83886080,5787884,78098196 2011-09-24 06:13,83886080,6837488,77048592 2011-09-24 06:14,83886080,7887092,75998988 2011-09-24 06:15,83886080,8936696,74949384 2011-09-24 06:16,83886080,11035904,72850176 2011-09-24 06:17,83886080,12085508,71800572 2011-09-24 06:18,83886080,13135112,70750968  : (以下略)
Rで分析 CSVデータを読み込む > df.dataframe <- read.csv("df.log") > head(df.dataframe) datetime   blocks    used available 1 2011-09-24 06:06 83886080 4738280  79147800 2 2011-09-24 06:07 83886080 4738272  79147808 3 2011-09-24 06:08 83886080 4738280  79147800 4 2011-09-24 06:09 83886080 4738284  79147796 5 2011-09-24 06:10 83886080 4738296  79147784 6 2011-09-24 06:11 83886080 4738280  79147800
日時を行の名前にする > rownames(df.dataframe) <- df.dataframe$datetime > df.dataframe$datetime <- NULL > head(df.dataframe)                    blocks    used available 2011-09-24 06:06 83886080 4738280  79147800 2011-09-24 06:07 83886080 4738272  79147808 2011-09-24 06:08 83886080 4738280  79147800 2011-09-24 06:09 83886080 4738284  79147796 2011-09-24 06:10 83886080 4738296  79147784 2011-09-24 06:11 83886080 4738280  79147800
Xtsオブジェクトに変換 > install.packages("xts") > library(xts) > df <- as.xts(df.dataframe) > head(df)                       blocks    used available 2011-09-24 06:06:00 83886080 4738280  79147800 2011-09-24 06:07:00 83886080 4738272  79147808 2011-09-24 06:08:00 83886080 4738280  79147800 2011-09-24 06:09:00 83886080 4738284  79147796 2011-09-24 06:10:00 83886080 4738296  79147784 2011-09-24 06:11:00 83886080 4738280  79147800 > ( start <- start(df) ) [1] "2011-09-24 06:06:00 JST" > ( end <- end(df) ) [1] "2011-09-24 06:24:00 JST"
散布図 > plot(df$used)
ある区間のデータを抜き出す > df2 <- df['2011-09-24 06:11:00::'] > head(df2)                       blocks     used available 2011-09-24 06:11:00 83886080  4738280  79147800 2011-09-24 06:12:00 83886080  5787884  78098196 2011-09-24 06:13:00 83886080  6837488  77048592 2011-09-24 06:14:00 83886080  7887092  75998988 2011-09-24 06:15:00 83886080  8936696  74949384 2011-09-24 06:16:00 83886080 11035904  72850176 > start(df2) [1] "2011-09-24 06:11:00 JST" > end(df2) [1] "2011-09-24 06:24:00 JST"
回帰分析 > fit <- lm(df2$used~index(df2)) > summary(fit) Call: lm(formula = df2$used ~ index(df2)) Residuals:     Min      1Q  Median      3Q     Max  -484440 -201761   11522  224904  438285  Coefficients:               Estimate Std. Error t value Pr(>|t|)     (Intercept) -2.734e+13  4.384e+11  -62.35   <2e-16 *** index(df2)   2.076e+04  3.330e+02   62.35   <2e-16 *** --- Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1  Residual standard error: 301300 on 12 degrees of freedom Multiple R-squared: 0.9969,     Adjusted R-squared: 0.9967  F-statistic:  3888 on 1 and 12 DF,  p-value: < 2.2e-16
診断図 > par(mfrow=c(2,2)) > plot(fit)
推定回帰直線 > plot(df$used) > abline(fit, col=2, lty=2)
限界値に到達する時刻を予測 > y <- as.numeric(df$blocks[1])	# ディスク容量 > a <- as.numeric(coef(fit)[2])	# 傾き > b <- as.numeric(coef(fit)[1])	# 切片 > x <- (y - b) / a > ( x.pos <- start - as.numeric(start) + x ) [1] "2011-09-24 07:14:46 JST“ > difftime(x.pos, end(df)) Time difference of 50.77831 mins このままだとあと50分で破綻するっぽい 古いログファイルを圧縮して、 /tmp以下を削除するよ!
グラフに描画 > xlim <- c(as.numeric(start(df)), x) > ylim<- c(min(df$used), y) > plot(df$used, xlim=xlim, ylim=ylim) > limit <- data.frame(y=c(y, y, y)) > rownames(limit) <- c(start, end, x.pos) > par(new=T) > plot(as.xts(limit), xlim=xlim, ylim=ylim, main=NULL, col=3, lty=2) > abline(fit, col=2, lty=2) > points(x.pos, y, col=4, pch=4)
グラフに描画
まとめ ディスク容量を線形回帰で分析してみた。 色々なシステム情報を取得して分析してみると面白そう。
参考資料 障害の兆候を見逃さないためのサーバ監視 http://www.atmarkit.co.jp/flinux/rensai/root07/root07b.html Xtsパッケージで時系列解析 http://www.slideshare.net/teramonagi/tokyo-r15-20110702 Rと回帰分析 http://mjin.doshisha.ac.jp/R/13.pdf
おしまい ありがとうございました。 @mangantempy

More Related Content

What's hot

Postgre sql9.3 newlockmode_and_etc
Postgre sql9.3 newlockmode_and_etcPostgre sql9.3 newlockmode_and_etc
Postgre sql9.3 newlockmode_and_etc
kasaharatt
 
Rユーザのためのspark入門
Rユーザのためのspark入門Rユーザのためのspark入門
Rユーザのためのspark入門
Shintaro Fukushima
 
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料20140531 JPUGしくみ+アプリケーション分科会 勉強会資料
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料
kasaharatt
 
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
Shintaro Fukushima
 
Maatkit で MySQL チューニング
Maatkit で MySQL チューニングMaatkit で MySQL チューニング
Maatkit で MySQL チューニング
Kensuke Nagae
 

What's hot (20)

Postgre sql9.3 newlockmode_and_etc
Postgre sql9.3 newlockmode_and_etcPostgre sql9.3 newlockmode_and_etc
Postgre sql9.3 newlockmode_and_etc
 
Rユーザのためのspark入門
Rユーザのためのspark入門Rユーザのためのspark入門
Rユーザのためのspark入門
 
RのffでGLMしてみたけど...
RのffでGLMしてみたけど...RのffでGLMしてみたけど...
RのffでGLMしてみたけど...
 
Deep Learningと他の分類器をRで比べてみよう in Japan.R 2014
Deep Learningと他の分類器をRで比べてみよう in Japan.R 2014Deep Learningと他の分類器をRで比べてみよう in Japan.R 2014
Deep Learningと他の分類器をRで比べてみよう in Japan.R 2014
 
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料20140531 JPUGしくみ+アプリケーション分科会 勉強会資料
20140531 JPUGしくみ+アプリケーション分科会 勉強会資料
 
Keynote In Japanese
Keynote In JapaneseKeynote In Japanese
Keynote In Japanese
 
テーマ「最適化 その2」
テーマ「最適化 その2」テーマ「最適化 その2」
テーマ「最適化 その2」
 
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
 
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
PythonでテキストをJSONにした話(PyCon mini sapporo 2015)
 
MySQLerの7つ道具 plus
MySQLerの7つ道具 plusMySQLerの7つ道具 plus
MySQLerの7つ道具 plus
 
20180119_6_JUIZ platform が実現する DoT (Deep Learning of Things)
20180119_6_JUIZ platform が実現する DoT (Deep Learning of Things)20180119_6_JUIZ platform が実現する DoT (Deep Learning of Things)
20180119_6_JUIZ platform が実現する DoT (Deep Learning of Things)
 
Maatkit で MySQL チューニング
Maatkit で MySQL チューニングMaatkit で MySQL チューニング
Maatkit で MySQL チューニング
 
Pg14_sql_standard_function_body
Pg14_sql_standard_function_bodyPg14_sql_standard_function_body
Pg14_sql_standard_function_body
 
PostgreSQL13 新機能紹介
PostgreSQL13 新機能紹介PostgreSQL13 新機能紹介
PostgreSQL13 新機能紹介
 
雑なMySQLパフォーマンスチューニング
雑なMySQLパフォーマンスチューニング雑なMySQLパフォーマンスチューニング
雑なMySQLパフォーマンスチューニング
 
R新機能抄出
R新機能抄出R新機能抄出
R新機能抄出
 
紹介 of Anemometer
紹介 of Anemometer紹介 of Anemometer
紹介 of Anemometer
 
R-hpc-1 TokyoR#11
R-hpc-1 TokyoR#11R-hpc-1 TokyoR#11
R-hpc-1 TokyoR#11
 
テーマ「最適化」
テーマ「最適化」テーマ「最適化」
テーマ「最適化」
 
PostgreSQLの関数属性を知ろう
PostgreSQLの関数属性を知ろうPostgreSQLの関数属性を知ろう
PostgreSQLの関数属性を知ろう
 

Viewers also liked

Rで解く最適化問題 線型計画問題編
Rで解く最適化問題   線型計画問題編 Rで解く最適化問題   線型計画問題編
Rで解く最適化問題 線型計画問題編
Hidekazu Tanaka
 
TokyoWebmining統計学部 第1回
TokyoWebmining統計学部 第1回TokyoWebmining統計学部 第1回
TokyoWebmining統計学部 第1回
Issei Kurahashi
 
Rで学ぶ現代ポートフォリオ理論入門 - TokyoR #18
Rで学ぶ現代ポートフォリオ理論入門 - TokyoR #18Rで学ぶ現代ポートフォリオ理論入門 - TokyoR #18
Rで学ぶ現代ポートフォリオ理論入門 - TokyoR #18
horihorio
 
パターン認識 08 09 k-近傍法 lvq
パターン認識 08 09 k-近傍法 lvqパターン認識 08 09 k-近傍法 lvq
パターン認識 08 09 k-近傍法 lvq
sleipnir002
 
異常行動検出入門 – 行動データ時系列のデータマイニング –
異常行動検出入門 – 行動データ時系列のデータマイニング –異常行動検出入門 – 行動データ時系列のデータマイニング –
異常行動検出入門 – 行動データ時系列のデータマイニング –
Yohei Sato
 
Rによるデータサイエンス13「樹木モデル」
Rによるデータサイエンス13「樹木モデル」Rによるデータサイエンス13「樹木モデル」
Rによるデータサイエンス13「樹木モデル」
Takeshi Mikami
 

Viewers also liked (20)

Tokyor17
Tokyor17Tokyor17
Tokyor17
 
Rで解く最適化問題 線型計画問題編
Rで解く最適化問題   線型計画問題編 Rで解く最適化問題   線型計画問題編
Rで解く最適化問題 線型計画問題編
 
3次元のデータをグラフにする(Tokyo.R#17)
3次元のデータをグラフにする(Tokyo.R#17)3次元のデータをグラフにする(Tokyo.R#17)
3次元のデータをグラフにする(Tokyo.R#17)
 
近似ベイズ計算によるベイズ推定
近似ベイズ計算によるベイズ推定近似ベイズ計算によるベイズ推定
近似ベイズ計算によるベイズ推定
 
Rで学ぶ 傾向スコア解析入門 - 無作為割り当てが出来ない時の因果効果推定 -
Rで学ぶ 傾向スコア解析入門 - 無作為割り当てが出来ない時の因果効果推定 -Rで学ぶ 傾向スコア解析入門 - 無作為割り当てが出来ない時の因果効果推定 -
Rで学ぶ 傾向スコア解析入門 - 無作為割り当てが出来ない時の因果効果推定 -
 
Rて計量経済学入門#tokyo.r.17
Rて計量経済学入門#tokyo.r.17Rて計量経済学入門#tokyo.r.17
Rて計量経済学入門#tokyo.r.17
 
Rによるデータサイエンス:12章「時系列」
Rによるデータサイエンス:12章「時系列」Rによるデータサイエンス:12章「時系列」
Rによるデータサイエンス:12章「時系列」
 
Tokyor18
Tokyor18Tokyor18
Tokyor18
 
2ch
2ch2ch
2ch
 
TokyoWebmining統計学部 第1回
TokyoWebmining統計学部 第1回TokyoWebmining統計学部 第1回
TokyoWebmining統計学部 第1回
 
Tokyo r 10_12
Tokyo r 10_12Tokyo r 10_12
Tokyo r 10_12
 
Tokyor16
Tokyor16Tokyor16
Tokyor16
 
Rデバッグあれこれ
RデバッグあれこれRデバッグあれこれ
Rデバッグあれこれ
 
Tokyo webmining 複雑ネットワークとデータマイニング
Tokyo webmining 複雑ネットワークとデータマイニングTokyo webmining 複雑ネットワークとデータマイニング
Tokyo webmining 複雑ネットワークとデータマイニング
 
Tokyo r18
Tokyo r18Tokyo r18
Tokyo r18
 
Rで学ぶ現代ポートフォリオ理論入門 - TokyoR #18
Rで学ぶ現代ポートフォリオ理論入門 - TokyoR #18Rで学ぶ現代ポートフォリオ理論入門 - TokyoR #18
Rで学ぶ現代ポートフォリオ理論入門 - TokyoR #18
 
パターン認識 08 09 k-近傍法 lvq
パターン認識 08 09 k-近傍法 lvqパターン認識 08 09 k-近傍法 lvq
パターン認識 08 09 k-近傍法 lvq
 
[R勉強会][データマイニング] R言語による時系列分析
[R勉強会][データマイニング] R言語による時系列分析[R勉強会][データマイニング] R言語による時系列分析
[R勉強会][データマイニング] R言語による時系列分析
 
異常行動検出入門 – 行動データ時系列のデータマイニング –
異常行動検出入門 – 行動データ時系列のデータマイニング –異常行動検出入門 – 行動データ時系列のデータマイニング –
異常行動検出入門 – 行動データ時系列のデータマイニング –
 
Rによるデータサイエンス13「樹木モデル」
Rによるデータサイエンス13「樹木モデル」Rによるデータサイエンス13「樹木モデル」
Rによるデータサイエンス13「樹木モデル」
 

Similar to サーバ異常検知入門

組み込みシステムのセキュリティ
組み込みシステムのセキュリティ組み込みシステムのセキュリティ
組み込みシステムのセキュリティ
FFRI, Inc.
 
ハードウェアによる仮想化支援機能を利用したハイパバイザーIPS
ハードウェアによる仮想化支援機能を利用したハイパバイザーIPSハードウェアによる仮想化支援機能を利用したハイパバイザーIPS
ハードウェアによる仮想化支援機能を利用したハイパバイザーIPS
FFRI, Inc.
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
akirahiguchi
 

Similar to サーバ異常検知入門 (20)

システムパフォーマンス勉強会#8
システムパフォーマンス勉強会#8システムパフォーマンス勉強会#8
システムパフォーマンス勉強会#8
 
組み込みシステムのセキュリティ
組み込みシステムのセキュリティ組み込みシステムのセキュリティ
組み込みシステムのセキュリティ
 
[data analytics showcase] B12: サーバー1,000台を監視するということ by 株式会社インサイトテクノロジー 小幡 一郎
[data analytics showcase] B12: サーバー1,000台を監視するということ by 株式会社インサイトテクノロジー 小幡 一郎[data analytics showcase] B12: サーバー1,000台を監視するということ by 株式会社インサイトテクノロジー 小幡 一郎
[data analytics showcase] B12: サーバー1,000台を監視するということ by 株式会社インサイトテクノロジー 小幡 一郎
 
Linux Performance Analysis in 15 minutes
Linux Performance Analysis in 15 minutesLinux Performance Analysis in 15 minutes
Linux Performance Analysis in 15 minutes
 
ハードウェアによる仮想化支援機能を利用したハイパバイザーIPS
ハードウェアによる仮想化支援機能を利用したハイパバイザーIPSハードウェアによる仮想化支援機能を利用したハイパバイザーIPS
ハードウェアによる仮想化支援機能を利用したハイパバイザーIPS
 
Chainer v1.6からv1.7の新機能
Chainer v1.6からv1.7の新機能Chainer v1.6からv1.7の新機能
Chainer v1.6からv1.7の新機能
 
IoTデバイス センサデータ分析システム
IoTデバイス センサデータ分析システムIoTデバイス センサデータ分析システム
IoTデバイス センサデータ分析システム
 
RouterBOARD with OpenFlow
RouterBOARD with OpenFlowRouterBOARD with OpenFlow
RouterBOARD with OpenFlow
 
A Benchmark Test on Presto, Spark Sql and Hive on Tez
A Benchmark Test on Presto, Spark Sql and Hive on TezA Benchmark Test on Presto, Spark Sql and Hive on Tez
A Benchmark Test on Presto, Spark Sql and Hive on Tez
 
R -> Python
R -> PythonR -> Python
R -> Python
 
文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...
文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...
文献紹介:Deep Analysis of CNN-Based Spatio-Temporal Representations for Action Re...
 
機械学習とこれを支える並列計算: ディープラーニング・スーパーコンピューターの応用について
機械学習とこれを支える並列計算: ディープラーニング・スーパーコンピューターの応用について機械学習とこれを支える並列計算: ディープラーニング・スーパーコンピューターの応用について
機械学習とこれを支える並列計算: ディープラーニング・スーパーコンピューターの応用について
 
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
 
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database AnalyticsPL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics
 
各言語の k-means 比較
各言語の k-means 比較各言語の k-means 比較
各言語の k-means 比較
 
機械学習 / Deep Learning 大全 (4) GPU編
機械学習 / Deep Learning 大全 (4) GPU編機械学習 / Deep Learning 大全 (4) GPU編
機械学習 / Deep Learning 大全 (4) GPU編
 
生活を豊かにするデータ解析と計算機の使われ方の進化
生活を豊かにするデータ解析と計算機の使われ方の進化生活を豊かにするデータ解析と計算機の使われ方の進化
生活を豊かにするデータ解析と計算機の使われ方の進化
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
 
【関東GPGPU勉強会#4】GTX 1080でComputer Vision アルゴリズムを色々動かしてみる
【関東GPGPU勉強会#4】GTX 1080でComputer Visionアルゴリズムを色々動かしてみる【関東GPGPU勉強会#4】GTX 1080でComputer Visionアルゴリズムを色々動かしてみる
【関東GPGPU勉強会#4】GTX 1080でComputer Vision アルゴリズムを色々動かしてみる
 
Mastodonインスタンスをセットアップできるスタートアップスクリプトについて
MastodonインスタンスをセットアップできるスタートアップスクリプトについてMastodonインスタンスをセットアップできるスタートアップスクリプトについて
Mastodonインスタンスをセットアップできるスタートアップスクリプトについて
 

サーバ異常検知入門