なぜSARなのか
私はかなり長い間監視してきました。 したがって、私の活動の性質上、ホストを監視するためにさまざまな「自転車」を思い付く必要があるとき、私はしばしば異常な状況に遭遇します。 たとえば、リソースが非常に限られているサーバー(仮想マシンまたはVDS)がある場合を考えます。
Zabbix、Nagios、Cactiなどの多くの優れた監視システムがあります。 しかし、私たちのすべての状況において、明らかな理由から、それらは適切ではありません-それら自体がリソースを消費しますが、それほど多くはありません。 質問がすぐに発生します、どうすればいいですか? そして、ここでSARは私たちを助けるために急いでいます。
SARのインストールと構成
SAR (System Activity Report)は、システムパフォーマンスに関する統計情報を収集するための非常に強力なユーティリティです。 sysstatパッケージに含まれています。 したがって、サーバーにsysstatパッケージがまだない場合は、インストールします。 たとえば、Debianの場合:
次に、SAR自体を構成する必要があります。 sysstatを含めます。このため、ファイルを修正します。
そして、行ENABLED = "false"をENABLED = "true"に変更します。 次に、cronでタスクを修正する必要があります。
私は毎分データを収集しているので、私のシステムでは次のようになります(少し違うかもしれません):
sysstatサービスの再起動:
これでセットアップは完了です。
SARを使用する
SARの使用方法については詳しく説明しません。 これを行うために、インターネット上に多くの記事があり、SAR自体は非常に広範なドキュメントを提供します。 必要なのはマンサールだけで、そこにあると思います。
MySQLでレポートをアップロードするためのSARを学ぶ
はい、はい、あなたはそれを正しく読みます。 もちろん、SARを意図した目的に使用し、コンソールから呼び出して、次の形式でレポートを受信できます。
$ sar -s 07:00:00 -e 07:10:00 Linux 3.2.0-4-amd64 (mind-x) 02.03.2015 _x86_64_ (1 CPU) 07:00:01 CPU %user %nice %system %iowait %steal %idle 07:01:01 all 0,64 0,00 0,15 0,10 0,00 99,11 07:02:01 all 0,03 0,00 0,02 0,00 0,00 99,95 07:03:01 all 0,03 0,00 0,02 0,00 0,00 99,95 07:04:01 all 0,03 0,00 0,02 0,02 0,00 99,93 07:05:01 all 0,05 0,00 0,03 0,00 0,00 99,92 07:06:01 all 0,63 0,00 0,17 0,10 0,00 99,11 07:07:01 all 0,03 0,00 0,02 0,00 0,00 99,95 07:08:01 all 0,02 0,00 0,02 0,00 0,00 99,97 07:09:01 all 0,03 0,00 0,02 0,00 0,00 99,95 : all 0,17 0,00 0,05 0,02 0,00 99,76
しかし、あなたは認めなければならない、私は長い一日の仕事の後、これらの数字を見たくない、私の目が痛いなど。 どうする? そのような重要な情報をどのように扱うか?
私はこの問題について一晩中考えて過ごしました。 すべての決定は私には奇妙に思えました。 おそらく私が思いついた解決策も奇妙ですが、なぜSAR MySQLと友達になりたいのですか? 私はさらに説明しようとします。
SARチューニング部分を注意深く読んでいると、SARは真夜中以降にログをローテーションすることに気づいたと思います。 これは、特に日ごとに雑誌を壊すために行われます。 一定の時間など、必要な列のみを選択できるように、データを継続的に受信したかった(後でグラフを作成するため) そして、これらのレポートをすべてデータベースにアップロードしてみませんか? サーバーにはすでにMySQLが含まれていたため、選択が明らかになりました。
だから、SARとMySQLの友達
私はこれについてインターネット全体を検索しましたが、実際には情報はなく、2、3の記事、スクリプトである読書の結果があります。 しかし、分解する前に、ベースを準備しましょう。
sysstatデータベースを作成します。
CREATE DATABASE `sysstat`;
ユーザーsysstatを作成します(このユーザーに他の権利を与えることができます)。
CREATE USER 'sysstat'@'localhost' IDENTIFIED BY 'some_pass'; GRANT ALL PRIVILEGES ON sysstat.* TO 'sysstat'@'localhost';
テーブルを作成します。私にとっては次のようなものです。
CREATE TABLE `host_health_cpu` ( `datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `pct_user` decimal(10,2) DEFAULT NULL, `pct_nice` decimal(10,2) DEFAULT NULL, `pct_system` decimal(10,2) DEFAULT NULL, `pct_iowait` decimal(10,2) DEFAULT NULL, `pct_steal` decimal(10,2) DEFAULT NULL, `pct_idle` decimal(10,2) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `host_health_memory` ( `datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `kbmemfree` int(11) DEFAULT NULL, `kbmemused` int(11) DEFAULT NULL, `per_memused` decimal(10,2) DEFAULT NULL, `kbbuffers` int(11) DEFAULT NULL, `kbcached` int(11) DEFAULT NULL, `kbcommit` int(11) DEFAULT NULL, `per_commit` decimal(10,2) DEFAULT NULL, `kbactive` int(11) DEFAULT NULL, `kbinact` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `host_health_la` ( `datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `runq_sz` int(11) DEFAULT NULL, `plist_sz` int(11) DEFAULT NULL, `ldavg_1` decimal(10,2) DEFAULT NULL, `ldavg_5` decimal(10,2) DEFAULT NULL, `ldavg_15` decimal(10,2) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `host_health_net` ( `datetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `iface` varchar(7) DEFAULT NULL, `rxpck_persec` decimal(10,2) DEFAULT NULL, `txpck_persec` decimal(10,2) DEFAULT NULL, `rxbyt_persec` decimal(10,2) DEFAULT NULL, `txbyt_persec` decimal(10,2) DEFAULT NULL, `rxcmp_persec` decimal(10,2) DEFAULT NULL, `txcmp_persec` decimal(10,2) DEFAULT NULL, `rxcst_persec` decimal(10,2) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
レポートをMySQLにアップロードするために、すべてが準備できました。
スクリプトを解析する
スクリプトでは、SARによって収集されたデータをさまざまな形式(CSV、JSON、XMLなど)で表示できる
sadfユーティリティを使用します。 CSVが必要です。 スクリプト自体はそれほど大きくなく、理解するのも難しくありません。sadf出力から最初の2列を削除するだけで、ホストとデータ読み取り間隔の情報が含まれています。 私たちの場合、ホストは1つしかなく、間隔はすでにわかっているので、この情報は必要ありません。
一般的に、このようなスクリプト。 充填を開始するには、cronに追加します。 5分ごとに電話をかけます。
*/5 * * * * bash /usr/local/sbin/sar.sh
SARの興味深い機能は、開始時刻を示すsar -sと呼ぶと、この時間自体はレポートに含まれないため、最後の6分間でsarスクリプトを呼び出すと、出力で5分間でレポートが取得されることです。 これを考慮する必要があります。 そうしないと、MySQLに「穴」または重複が生じます。
その結果、次のようなものが得られます。
mysql> SELECT * FROM host_health_memory WHERE datetime > NOW() - INTERVAL 10 MINUTE; +---------------------+-----------+-----------+-------------+-----------+----------+----------+------------+----------+---------+ | datetime | kbmemfree | kbmemused | per_memused | kbbuffers | kbcached | kbcommit | per_commit | kbactive | kbinact | +---------------------+-----------+-----------+-------------+-----------+----------+----------+------------+----------+---------+ | 2015-03-02 08:36:01 | 1381896 | 679396 | 32.00 | 104044 | 155520 | 803420 | 38.00 | 484244 | 142688 | | 2015-03-02 08:37:01 | 1377476 | 683816 | 33.00 | 104068 | 155668 | 810284 | 39.00 | 487632 | 142808 | | 2015-03-02 08:38:01 | 1377476 | 683816 | 33.00 | 104096 | 155672 | 810284 | 39.00 | 487668 | 142804 | | 2015-03-02 08:39:01 | 1377476 | 683816 | 33.00 | 104120 | 155680 | 810524 | 39.00 | 487832 | 142804 | | 2015-03-02 08:40:01 | 1372416 | 688876 | 33.00 | 104160 | 155684 | 819104 | 39.00 | 490708 | 142816 | | 2015-03-02 08:41:01 | 1377104 | 684188 | 33.00 | 104276 | 155700 | 810524 | 39.00 | 488008 | 142808 | | 2015-03-02 08:42:01 | 1379228 | 682064 | 33.00 | 104288 | 155708 | 816640 | 39.00 | 486392 | 142632 | | 2015-03-02 08:43:01 | 1378980 | 682312 | 33.00 | 104328 | 155708 | 816744 | 39.00 | 486680 | 142628 | | 2015-03-02 08:44:01 | 1378608 | 682684 | 33.00 | 104356 | 155716 | 816932 | 39.00 | 486936 | 142636 | | 2015-03-02 08:45:01 | 1371564 | 689728 | 33.00 | 104392 | 155720 | 827704 | 40.00 | 491912 | 142648 | +---------------------+-----------+-----------+-------------+-----------+----------+----------+------------+----------+---------+
このデータをどうしますか?
それらを使って何でもできます。 このデータに基づいてグラフを作成することを少し高めに書きました。 これは可能な限りの方法で行うことができます。 それはすべてあなたの想像力にかかっています。
ヌープロット
私の選択は
Gnuplotにかかった 。 これは、グラフやチャートなどを構築するための非常に便利なツールです。 Gnuplotの
ホームサイトには多くのドキュメントがあり
ます 。そのため、機能と使用方法に関する部分はスキップします。
私はこのスクリプトを書きました:
次のように実行します。
$ sar-plot.sh -t mem -o /path/to/memory.svg
その結果、1時間でこのようなスケジュールになります。

このスクリプトをcronに追加して、たとえば5分ごとに1回呼び出すと、常に新しいグラフが作成されます。 たとえば、私はこのようにしました:
*/5 * * * * bash /usr/local/sbin/sar-plot.sh -t cpu -o /path/to/images/cpu.svg */5 * * * * bash /usr/local/sbin/sar-plot.sh -t mem -o /path/to/images/memory.svg */5 * * * * bash /usr/local/sbin/sar-plot.sh -t net -o /path/to/images/network.svg */5 * * * * bash /usr/local/sbin/sar-plot.sh -t la -o /path/to/images/la.svg
さらに、これらの画像をHTMLページに追加して、自動的に更新することができます。 したがって、ホストのパフォーマンスをほぼリアルタイム(5分遅れで)で監視できます。 原則として私たちにとって十分なものです。
おわりに
SARは非常に便利なツールであり、システム管理者の作業に不可欠です。 私が説明した監視方法は、リソースが非常に限られている人、Zabbixサーバーでの昇格を希望しない人、またはその他のさまざまな理由に適しています。
このソリューションを自分で開発できます。
- 記事に記載されていない他のメトリックを追加します。たとえば、ディスクサブシステムのアクティビティに関する統計を追加できます。
- Javascriptライブラリを使用するなど、他の方法でグラフィックを描画できます。
- 重要な値に達すると、Webページにアラートが表示され、たとえばメッセージがメールに送信されるように、システムを変更できます。
それはすべてあなたの欲求に依存します。 頑張って