Monitoring Casual Talk in Kyoto
課題があった
1. これはなにか
2. なにがつらいのか
3. 機能としてのZabbix
4. Zabbixは人類に扱えるものなのか
5. 毎日カジュアルに全台の全メトリクスを見たい(もしくは気になるところをサクっと見たい)
解決する
6. Zabbixのスキーマ設計を確認
7. グラフ名でまとめるしかない
8. グラフをMechanizeで取得する
9. グラフ一覧のつくりかた
10. Zabbix::Senrigan後の世界
まとめ
まとめ
Zabbixのプルダウン地獄から逃れる蜘蛛の糸
再現してみよう
想像力が必要
最高。これ以上ないと思う
3-1. メトリクスとアラートの両立
Zabbixだけでメトリクス取得とそのメトリクスの値を利用したアラートの設定ができる
3-2. 取得アイテム数値の柔軟性
その値ではなく、前回と今回の差分をアイテムとして保存できる
3-3. アラート設定の柔軟性
1週間前の同じ時間帯前後30分と比べて〜のように時空を超えて設定できる
3-4. グラフ設定の柔軟性
積算・円など設定が可能
機能が多すぎる
見れるようなものつくろう
グラフのテーブル
CREATE TABLE `graphs` (
`graphid` bigint unsigned NOT NULL,
`name` varchar(128) DEFAULT '' NOT NULL,
`width` integer DEFAULT '0' NOT NULL,
`height` integer DEFAULT '0' NOT NULL,
`yaxismin` double(16,4) DEFAULT '0' NOT NULL,
`yaxismax` double(16,4) DEFAULT '0' NOT NULL,
`templateid` bigint unsigned NULL,
`show_work_period` integer DEFAULT '1' NOT NULL,
`show_triggers` integer DEFAULT '1' NOT NULL,
`graphtype` integer DEFAULT '0' NOT NULL,
`show_legend` integer DEFAULT '1' NOT NULL,
`show_3d` integer DEFAULT '0' NOT NULL,
`percent_left` double(16,4) DEFAULT '0' NOT NULL,
`percent_right` double(16,4) DEFAULT '0' NOT NULL,
`ymin_type` integer DEFAULT '0' NOT NULL,
`ymax_type` integer DEFAULT '0' NOT NULL,
`ymin_itemid` bigint unsigned NULL,
`ymax_itemid` bigint unsigned NULL,
`flags` integer DEFAULT '0' NOT NULL,
PRIMARY KEY (graphid)
) ENGINE=InnoDB;
ホストのテーブル
CREATE TABLE `hosts` (
`hostid` bigint unsigned NOT NULL,
`proxy_hostid` bigint unsigned NULL,
`host` varchar(64) DEFAULT '' NOT NULL,
`status` integer DEFAULT '0' NOT NULL,
`disable_until` integer DEFAULT '0' NOT NULL,
`error` varchar(128) DEFAULT '' NOT NULL,
`available` integer DEFAULT '0' NOT NULL,
`errors_from` integer DEFAULT '0' NOT NULL,
`lastaccess` integer DEFAULT '0' NOT NULL,
`ipmi_authtype` integer DEFAULT '0' NOT NULL,
`ipmi_privilege` integer DEFAULT '2' NOT NULL,
`ipmi_username` varchar(16) DEFAULT '' NOT NULL,
`ipmi_password` varchar(20) DEFAULT '' NOT NULL,
`ipmi_disable_until` integer DEFAULT '0' NOT NULL,
`ipmi_available` integer DEFAULT '0' NOT NULL,
`snmp_disable_until` integer DEFAULT '0' NOT NULL,
`snmp_available` integer DEFAULT '0' NOT NULL,
`maintenanceid` bigint unsigned NULL,
`maintenance_status` integer DEFAULT '0' NOT NULL,
`maintenance_type` integer DEFAULT '0' NOT NULL,
`maintenance_from` integer DEFAULT '0' NOT NULL,
`ipmi_errors_from` integer DEFAULT '0' NOT NULL,
`snmp_errors_from` integer DEFAULT '0' NOT NULL,
`ipmi_error` varchar(128) DEFAULT '' NOT NULL,
`snmp_error` varchar(128) DEFAULT '' NOT NULL,
`jmx_disable_until` integer DEFAULT '0' NOT NULL,
`jmx_available` integer DEFAULT '0' NOT NULL,
`jmx_errors_from` integer DEFAULT '0' NOT NULL,
`jmx_error` varchar(128) DEFAULT '' NOT NULL,
`name` varchar(64) DEFAULT '' NOT NULL,
PRIMARY KEY (hostid)
) ENGINE=InnoDB;
powerd by tiqav
ホストにgraphid
の情報が関連付けられていないのでグラフ名でまとめるしかない
my $sth = $dbh->prepare('SELECT graphid FROM graphs WHERE name = ? \
AND templateid IS NOT NULL');
$sth->execute($graph_name);
templateでitem付与していない場合はtemplateid IS NOT NULL
は消さないとダメ
そもそもtemplateかhostかがわかるフラグがあればいい。(ありそう)
これでグラフ名毎のグラフIDは取得できることがわかった
chart2.php?graphid=$graphid &width=$width &period=$period &stime=$days$time
chart2.php?graphid=535 &width=500 &period=86400 &stime=20131128 120000
9-1. graphs.name
で抽出したいグラフ名を指定
9-2. graphs.name
のgraphid
が取れる
9-3. graphiid
を利用してひたすらMechanizeでローカルにダウンロード
9-4. graph.name
を利用して個別ページを生成
9-5. demoのようにページが生成されるので、よしななディレクトリに放り込む
10-1. 職人が機械では気付かないような変化に気づきやすくなった
10-2. cpanfile置いてポータビリティ性持たせたけど敷居は高いと思う
10-3. 色々先輩たちにききながらほしいものがつくれたのは今後の役に立つ
目を閉じたらすべてのサーバのメトリクスの情報が手に入るようにしたい