cacti で CMDPHP: Poller[0] ERROR: SQL Assoc Failed!, Error:’1017′ エラーが出てグラフが描画されない
リソースモニタリングツールの Cacti 使ってますか? 私も最近は Zabbix がメインですが、古いシステムではまだ Cacti が残っています。そのグラフがうまく描画されていないことに気づきました。
まず SNMP が動作しているかを疑いましたが、正常に動作していました。次にログを確認すると、以下のようなエラーが出ていました。
1 2 3 4 5 |
02/10/2016 04:05:01 AM - CMDPHP: Poller[0] ERROR: SQL Assoc Failed!, Error:'1017', SQL:"SELECT local_data_id, rrd_name FROM poller_output LIMIT 20" 02/10/2016 04:05:01 AM - CMDPHP: Poller[0] ERROR: SQL Cell Failed!, Error:'1017', SQL:"SELECT COUNT(*) FROM poller_output" 02/10/2016 04:05:02 AM - CMDPHP: Poller[0] ERROR: SQL Assoc Failed!, Error:'1017', SQL:"select poller_output.output, poller_output.time, UNIX_TIMESTAMP(poller_output.time) as unix_time, poller_output.local_data_id, poller_item.rrd_path, poller_item.rrd_name, poller_item.rrd_num from (poller_output,poller_item) where (poller_output.local_data_id=poller_item.local_data_id and poller_output.rrd_name=poller_item.rrd_name) LIMIT 10000" 02/10/2016 04:05:02 AM - CMDPHP: Poller[0] ERROR: SQL Assoc Failed!, Error:'1017', SQL:"select poller_output.output, poller_output.time, UNIX_TIMESTAMP(poller_output.time) as unix_time, poller_output.local_data_id, poller_item.rrd_path, poller_item.rrd_name, poller_item.rrd_num from (poller_output,poller_item) where (poller_output.local_data_id=poller_item.local_data_id and poller_output.rrd_name=poller_item.rrd_name) LIMIT 10000" 02/10/2016 04:05:02 AM - CMDPHP: Poller[0] ERROR: SQL Assoc Failed!, Error:'1017', SQL:"select poller_output.output, poller_output.time, UNIX_TIMESTAMP(poller_output.time) as unix_time, poller_output.local_data_id, poller_item.rrd_path, poller_item.rrd_name, poller_item.rrd_num from (poller_output,poller_item) where (poller_output.local_data_id=poller_item.local_data_id and poller_output.rrd_name=poller_item.rrd_name) LIMIT 10000" |
このログを手がかりに調べてみると、どうやらデータベースが破損しているときになるようです。
そこでいろいろな手段を試してみます。
Cacti の DB 修復ツールを実行する
Cacti には repair_database.php という修復ツールが備わっているのでそれを実行してみます。
1 |
# /usr/bin/php /var/lib/cacti/cli/repair_database.php |
しかし、残念ながらうまく行きませんでした。そこで次の方法に移ります。
Rebuild Poller Cache の実行
Cacti の Poller Cache を再構築します。この機能は Web の画面から実行できます。
Web 管理画面の下の方にある System Utilites メニューから Rebuild Poller Cache を実行します。
しかしながら、この方法では何も変わりませんでした。。
MySQL データベースを確認する
MySQL のデータベースファイルを確認すると、テーブル一覧は poller_output テーブルは出てきますが、アクセスできません。データベースファイルを調べると
1 2 3 4 5 |
# cd /var/lib/mysql/cacti/ # ls poller_output* poller_output.frm |
定義ファイル poller_output.frm だけが存在しています。 本来あるはずのデータファイル poller_output.MYD やインデックスファイル poller_output.MYI がありません。
このような場合はもうデータがありませんのでバックアップから復旧するか、あきらめて再構築します。今回は MySQL 5.6 リファレンスマニュアル MyISAM テーブルの修復方法 の方法に従って TRUNCATE をしました。
poller_output テーブルの Truncate
念のために poller_output.frm をコピーしておきます。次に mysql データベースにログインして TRUNCATE を実行します。
1 2 3 4 |
mysql> TRUNCATE TABLE poller_output ; Query OK, 0 rows affected (0.01 sec) |
空の poller_output.MYD poller_output.MYI ファイルができます。待避していた poller_output.frm を戻します(そもそもデータが失われているので本来不要かもしれません。)
これでグラフの描画が無事復活しました。
ITエンジニア募集中!
キュアコード株式会社はITエンジニアを募集しております。少人数の職場なので、上流・下流やサーバー・クライアント対応の垣根なく、あなたの強みを活かしながら いろいろなことにチャレンジ可能です。エンジニアとしての未経験の方、経験が少ない方も歓迎しています。
下記よりITエンジニア募集の採用情報をご覧いただけます。