zabbixがmysqlのせいでエラーを吐いて起動しなくなったのでその復旧メモ

zabbixがエラーを吐いて、起動しなくなった。
ZabbixにWebアクセスすると、以下のようなメッセージが出ている。
どうやら、mysqldが止まっている模様

Dtabase error connectiong to database [Can’t connect to local MySQL server though ‘var/lib/mysql/mysql.sock'(2)]

zabbix_障害発生
/etc/init.d/mysqld status で確認すると
mysqldは停止していますがサブシテムがロックされています
と表示されている・・・・

どうやらmysqldが正常な手順ではなく、異常終了してしまった状態のようだ。

サーバ自身を再起動してもだめなので、もう少しし並べて見ると、
Mysqlのログに、いやなメッセージが・・・・

tail -30 /var/log/mysqld.log

どうやらテーブルのインデックスが壊れているようなメッセージを発見。

でももう少しあがいてみる。
/etc/my.cnfを開いて以下の行を[mysqld]に追加(リカバリモードでの起動を指示)
innodb_force_recovery = 1

で、rebootコマンドで再起動してみた。
reboot

dbが起動したことを確認
/etc/init.d/mysqld status

とりあえず、Mysqlの起動はしている模様。

この状態でZabbixにWebアクセスすると、
とりあえず起動はするが、あちこちにUpdateに失敗した旨がされている・・・・

たぶんリカバリモードで起動しているので、DatabaseがReadOnlyモードになっているせいでしょう。

zabbix_暫定復旧

この状態でDB全体をチェックしてみる
mysqlcheck -c zabbix -u zabbix -p

やはりzabbix.history_uintが壊れていると出ている。

一応、修復しようとして見ましたが
mysqlcheck -r zabbix history_uint -u zabbix -p

InnoDBなのでできないみたい。

なので、mysqlコマンドからコマンドを実行して更なる調査を実施
まずは、mysqlコマンドを起動
mysql -u zabbix -D zabbix -p

テーブルの状態を再度確認してみると
check table history_uint;

状況はいっしょですね。

ついでに該当テーブルのインデックスの状況を確認して見ます。
show index from history_uint;

ここから復旧してみます。
まずは該当テーブルのバックアップを取得します。

単純に出力してもよいのだけども、ダンプファイルが巨大になりすぎるので圧縮して出力させます。
mysqldump zabbix history_uint | gzip > history_uint_bk.sql.gz

ダンプ出力が完了したら、壊れたテーブルを削除します。
drop table history_uint;

リカバリモードから通常モードで復帰させてmysqldを起動します。

vi /etc/my.cnf
で以下を変更(コメント化)
#innodb_force_recovery=1

正常に起動したことを確認したら、先ほど取ったダンプからリストアします。
zcat history_uint_bk.sql.gz | mysql -u zabbix -D zabbix -p

リストアが終わったら、壊れたテーブルが正常に戻っているかを確認します。
select count(*) from history_uint;
show index from history_uint;

ちゃんとインデックスも戻っていますね
サーバを再起動して、Zabbixが使用できるか確認します。

zabbix_復旧完了
ちゃんと起動しました。
これでなんとか修復できましたが、なぜ壊れたのかは謎。
取り合えず、もう少しmysqldのチューニングが必要なのかもしれない。

とりあえずZabbix仮想マシンの割り当てメモリを512MBから1GBに増やして、innodb_buffer_pool_sizeを128MB -> 256MBに変更して様子見中。

/etc/my.cnf

Zabbixサーバのメモリを2GBとか4GBぐらい割り当てるんだったら、こんな設定例みつけたので故実参考にします。
http://www.zabbix.jp/node/72
http://kometchtech.blog.fc2.com/blog-entry-1290.html

 

今回の参考URL

http://dev.mysql.com/doc/refman/5.1/en/forcing-innodb-recovery.html
http://cimacoppi.exblog.jp/13146947

http://qiita.com/pugiemonn/items/8a6b322654aa65e2966b

http://www.dbonline.jp/mysql/table/index10.html
http://d.hatena.ne.jp/jitsu102/20120106/1325799325
http://mysql.javarou.com/dat/000389.html

MySQLでInnoDBのDatabase pageが壊れる。


http://kb.odin.com/jp/6586
https://dev.mysql.com/doc/refman/5.6/ja/rebuilding-tables.html

MySQL の壊れたテーブルを修復


http://www.dbonline.jp/mysql/table/index4.html
http://qiita.com/sue738/items/5c8ca15d5d91088e32bf
http://blog.layer8.sh/ja/2011/12/23/mysql%E3%82%92%E9%AB%98%E9%80%9F%E5%8C%96%E3%81%97%E3%81%9F%E3%81%84%E3%81%A8%E3%81%8D%E3%81%AE%E3%83%81%E3%83%A5%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0/
http://www.zabbix.jp/node/72
http://kometchtech.blog.fc2.com/blog-entry-1290.html

Zabbixの蓄積系データを初期化するhttp://qiita.com/rui5885/items/e9bd3eefa625a288bb48

全データを削除する
http://mysql.deikou.com/pages/000067.html

http://phpspot.net/php/pgmysqldump%E3%81%A7%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%EF%BC%86%E5%BE%A9%E5%85%83.html

http://www.risewill.co.jp/blog/archives/1111

 

WordPressメモ

突然Wordpressの新しい記事が見えなくなってしまい、とりあえず再起動したら、すべての記事が見えなくなってしまったので、いろいろ調べてみたら、SQLの一部テーブルが壊れてしまったらしい。

原因に気づいたのは、試行錯誤の前にmysqlのDBバックアップをしようとしたら、テーブルが壊れている旨のメッセージが出たため。

mysqldump -u wordpress -p データベース名


なので修復してみる(こんな感じ)

これで直った。

 

ついでにたまった記事のコメントのを削除

WordPressでSQLから承認待ちコメントを一括で削除する方法

DELETE FROM wordpress.wp_comments WHERE comment_approved=’0′;

データベース名がwordpressの場合、上記のように入力します。

実行例

Windows版MySQL WorkbanchからZabbix用MySQLにアクセスする。

MySQLに接続するために、MySQL Workbench
(http://www-jp.mysql.com/products/workbench/)
を試してみたが、MySQLの接続はデフォルトでローカルのみなので、許可が必要
sqlコマンドで以下のように実行すれば、外部の特定ホストから接続できるようです。

また、全ホストからの接続を可能とする場合は、以下のようにすればいいようです。

これで接続できました。 Mysqlworkbench “Windows版MySQL WorkbanchからZabbix用MySQLにアクセスする。” の続きを読む

Zabbix 2.2.1 で使用しているMySQLをチューニングしてみる

Zabbix 2.2.1 で使用しているMySQLのチューニングメモ

 

 

 

Zabbix 2.2.1 で MySQLから直接ITEM値等を取得してみる(TSV,CSV)

Zabbix 2.2.1で各アイテムの値をデータとして取得するときは、
「監視データ」->「最新データ」->「グラフ」or「ヒストリ」から「値」を選択すると
「プレーンテキスト」ボタンでTSV形式で取得できるようですが、なぜか1000個ぐらいまでしか
取得できませんでした。(1分ごとの取得するアイテムだと16.6時間分しか取得できない)

しょうがないので、mysqlのDBにから直接情報w取得出来ないかを調べてみました。

本来は、Zabbix API使うのが正当なんだろうけど、現状うまく使いこなせません。

 

まずはmysqlの使い方を確認

mysqlクライアントで実行(表形式で出力されます)

直接SQL分を指定して実行するには、以下のように指定します。

ファイルにtsv出力するには、単純に標準出力をリダイレクトすればよいようです。

ファイルにcsv出力するには、以下のようにtabを’,’に変換して出力します。

 

 

実際に、Zabbix 2.2.1のDBから情報を取得してみます。

  • ホスト一覧取得
  • ホストごとの監視項目一覧取得
  • 指定ホストのアイテム最新値一覧取得
  • アイテム値全取得

 

ホスト一覧を取得

 

 

ホストごとの監視項目一覧を表示

 

 

指定ホストのアイテム最新値一覧

 

 

アイテム値全取得(特定項目,全項目も表示できるが、非常に時間がかかります)

 

こんな感じにすれば、情報は取得できそうですが、
Zabbix のバージョンが上がった時に対応できなくなる可能性が高いのが残念。

あと、mysqlの設定が標準だと検索に時間がかかります。
実際にはチューニング必須なようです(チューニング方法はまた今度)

 

Linux用wmic の出力結果を Zabbix に取り込む方法を検討してみる

参考になりそうな情報をかき集めてみた。

Linux用wmicの出力結果は以下のようなもので、そのままでは取り込みずらい。

そこで、別の監視ツール用だけど、

「cactiEZでWindowsOSのWMI値を直接取得してグラフを作成する手順」
http://pnpk.net/cms/?p=3861

さんのページのwmi.phpを使うと、以下のフォーマットに変更できるとのこと。

このフォーマットだと、スクリプトで処理しやすい。

このような形式でのサンプルを探してみると、このような例が見つかった。
/proc/meminfoの実行例がこんなフォーマットなので、ほとんど同じですね。

あとは、

/proc/meminfoの情報をzabbixで収集してみるqiita.com/mutz0623/items/2a8186de010c494cbfe0

さんのスクリプトを参考に
「:」文字の前部分をZabbix_senderのキー、後部分を値として取り込めば、
行けるんじゃないかと妄想中。

 

LinuxからWMI経由でWindowsの情報を取得/プログラム実行してみる

Linuxから、WMI経由でWindowsの情報を取得できるツールがあったので試してみた。

これと、ZABBIXとうまく連携できれば、(SNMP経由でない)本当のエージェントレスができそう。

インストール方法は以下の通り

ここで、以下のメッセージが出る場合は、
/bin/sh: line 2: ./configure: そのようなファイルやディレクトリはありません
yumで autoconfをインストールして、再度makeします。

makeには結構時間かかります。

make install前に動作確認します。

 

試しに、情報を取得してみます。

Windowsの情報を取得

特定のプロセスの情報を取得(EpgTimerSrv.exe)

特定のプロセスの情報を取得(値の行のみ)

動作確認したら、インストールします。

RPMもあるっぽい(けど、まだ試していません)
http://www.harumaki.net/2012/05/09/centos%E3%81%ABwmi%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%82%92%E5%85%A5%E3%82%8C%E3%81%A6%E3%81%BF%E3%82%8B/

ちなみに、ファイルの情報を取得する場合は以下の様にします。

なぜか、\ -> \\\に変換しないと、エラーになります(\\ではダメ)。
それと、ファイルパスに2バイト文字を含むような場合も失敗しますが、こちらはまだ未解決。
フォルダ単位で各ファイル全部をWMIで取得して後からGrepで文字列抽出するのならいけましたが、とりあえずこれで。

 

なお、接続先がWindows Vista,2008以降だとセキュリティーがきびしくなっているので、
UACを無効にするか、ローカルのAdministratorもしくは、管理者権限を持ったドメインユーザで接続する必要があるようです。

UACはGUIで設定するか、レジストリを変更して再起動します。

UACを無効にできるのであれば一番早いですが、そのままだと管理者権限を持ったローカルユーザで接続しても接続を拒否られる場合は、以下のレジストリを作成・変更してみてください。
再起動は不要らしいです。

 

その他接続できない場合は次の点を確認してみてください。
(Administratorsグループのユーザであれば、Firewall以外はデフォルトでは大丈夫なはずですが・・・)

・Firewallの設定

WindowsFireWallが有効の場合は以下の項目を有効にします。
[標準プロファイル]or[ドメインプロファイル]
・[Windowsファイアウォール:リモート管理の例外を許可する](2003)
・[Windowsファイアウォール:着信リモート管理の例外を許可する](2008以降)

・サービスの起動確認
Windows Management Instrumentationサービス(サービス名:WinMgmt)が
起動しているかの確認

・DCOMのアクセス権限(接続元)

dcomcnfg.exeを起動し、
コンポーネントサービス->コンピュータ->マイコンピュータのプロパティーを開き、
・[既定のプロパティ]タブを選択して,[このコンピュータ上で分散COMを有効にする]が
チェックされているか確認する。

 

・DCOMのアクセス権限(接続先)

dcomcnfg.exeを起動し、
コンポーネントサービス->コンピュータ->マイコンピュータのプロパティーを開き、
・[既定のプロパティ]タブを選択して,[このコンピュータ上で分散COMを有効にする]が
チェックされているか確認する。
・[COMセキュリティ]タブを選択して、[制限の編集]から接続ユーザで
アクセス許可されているかを確認する。

 

・WMIの名前空間のセキュリティーの確認

wmimgmt.mscを起動し、WMIコントロールでプロパティーを表示し、
セキュリティタブのRoot->CIMV2のセキュリティーを確認します。
接続ユーザでアクセス許可されていることを確認します。
どうしてもうまくいかない場合でUACのセキュリティ機能が有効の場合は、
ユーザー自身に対して設定するか、
UsersグループとAdministratorsグループ以外のユーザーが属するグループに対して
設定してみてください。

 

 

 

なお、一緒に、winexeというツールもインストールされます。
これは、Linux側のコマンドラインからWindows上でプログラムを実行するものです。
基本的には、以下のコマンド実行できます。

ただ、実行時以下のようにエラーが出ることがあります。

その場合は、対象のWindows側で、以下のコマンドを実行しておけばよいようです。(参考:http://community.zenoss.org/people/chitambira/blog)

ちなみにこれ、バグだそうで、
winexe/service.c ファイルの以下の部分を修正して、
再度make&make installすれば治るようです。

実際やってみたら、ちゃんと自動でWindows側にサービスが登録され、リモート実行できるようになりました。

また、以下のようにメッセージが出た場合は、

いったん、次のコマンドを入れると解決できる場合もあるそうです

なお、上記winexeはバージョン0.80ですが、、最新版(1.00)が出ているんので、必要があればこちらを
http://sourceforge.net/projects/winexe/files/

インストール方法はこちらを参考に

winexe(1.00)のインストール

Zabbix で Nexentastorを監視するためのメモ

ESXi用データストアとして家で使っている
ストレージソフトNexentastorの監視のためのメモ

Nexentastor側でSNMPを有効にした状態で
以下のテンプレートを割り当てることで監視しています

Template ICMP Ping
Template SNMP OS Linux

これだけで、以下の項目は自動認識します。

  • Disk Partirions([各マウント領域毎])
    • Allocation units for Storage (例:512B)
    • Description of Storage (例:/)
    • Total disk space (例:11.13GB)
    • Total disk space in units (例:23.35 Munits)
    • Used disk space (例:6.39GB)
    • Used disk space in units (例:13.4 Munits)
  • General(通常のSNMP情報)
    • Device contact details (例:Root@example.com)
    • Device description (例:NexentaOS)
    • Device location (例:Huge Data Center)
    • Device name (例:NS001)
    • Device uptime (例:23日, 05:24:42)
  • ICMP(Ping状況)
    • ICMP loss (例:0%)
    • ICMP ping (例:UP(1))
    • ICMP responce time (例:6.5ms)
  • ネットワーク使用状況(サマリ)
    • Number of network interfaces (例:3)
  • ネットワーク使用状況(ネットワークインターフェース毎)
    • Admin status of interface (例:up(1))
    • Alias of interface (例:)
    • Description of interface (例:e1000g0)
    • Inbound errors on interface (例:0)
    • Incoming traffic on interface (例:23.7 Mbps)
    • Operational status of interface (例:up(1))
    • Outbound errors on insterface (例:0)
    • Outgoing traffice on interface (例:14.65Mbps)
  • Processeors(CPUコア単位)
    • Utilization of processor (例:19%)

そのほか、SNMP Trapの設定もしていれば、SNMP Trap情報も取得できます(ZFSのRAID異常メッセージも通知されます)。

 

あと、ZFSのステータスまで、取得したければ、
Zabbix Agentを導入して、テンプレートを追加してやればできそう・・・・

For Nexenta CE 3.1.3.5 and zabbix agent 2.0.4 tested right now (11 Jan 2013):
https://www.zabbix.com/wiki/howto/install/solaris/opensolaris

Zabbix ZFS discovery monitoring
https://www.zabbix.com/forum/showthread.php?p=141209

こちらはそのうち試す予定です。

Windows7で長時間稼働させていると、ファイル共有の動作が不安定になる場合の対策メモ

以下のシステムイベントログが出てしまった時の対策

うちの環境だと、1週間程度を過ぎるとファイル共有が不安定になってきます。
EDCBが全力稼働のせいかもしれんけど。

srv エラー 2017 非ページ プール割り当ての制限に達したため、サーバーはシステムの非ページ プールから割り当てることができませんでした。

レジストリエディタ(regedit)で

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Lanmanserver\Parameters
に移動し、以下を設定する。

但し、項目が存在しない場合があるので、その場合は、DWORD値(32ビット)を作成の上で設定する。

  • Size:3(10進数)にする。
    1:ローカルアプリケーション用にサーバを最適化、2:ローカルとリモートに配分、
    3:ネットワークの処理用に最適化。
  • IRPStackSize:50(10進数)にする。
    デフォルトは、10進数の15。お奨めは10進数の20もしくは50。
    33~38はエラー可能性ありとのこと。I/O 要求パケット (IRP) のスタック ロケーション数。
  • MaxMpxCt:255(10進数)とする。
    10~255まで。サーバーをサポートしている要求の最大数。
  • MaxWorkItems:1024(10進数)とする。
    少なくとも MaxMpxCtの値の4倍にする。デフォルトで64 最大で1,024。

Size,IRPStackSize,MaxMpxCt,MaxWorkItemsの4つを設定

このSize,IRPStackSize,MaxMpxCt,MaxWorkItemsの4つを設定 以上の設定をし、
サーバーを再起動して現在検証中。

 

Windows7でイベントログ監視したときのエラーでアクションが発生するのでその対策メモ

以下のアプリケーション イベントログが出てしまった時の対策

SideBySide エラー 33 “c:\program files\linkshellextension\LSEConfig.exe”
のアクティブ化コンテキストの生成に失敗しました。
従属アセンブリ Microsoft.VC80.MFC,processorArchitecture=”amd64″,
publicKeyToken=”1fc8b3b9a1e18e3b”,type=”win32″,
version=”8.0.50727.762″ が見つかりませんでした。
詳細な診断を行うには sxstrace.exe を実行してください。

link shell extension(ジャンクションなどをエクスプローラから簡単に作れるソフト)が「Microsoft Visual C++ 2005 SP1 再頒布可能パッケージ (x64)」を要求しているらしい。

本来は、Microsoft Visual C++ 2008 Runtimeとかが入っていれば、それが互換性を持っているのだけど、厳密に必要なDLLを要求している模様。

だから、64Bit版のMicrosoft Visual C++ 2005 Runtimeをいれれば大丈夫らしいです。
(32Bit版のMicrosoft Visual C++ 2005 Runtimeとは別です。)

といっても、64Bit版が入っていなくてもlink shell extension自身は動作するので、
エラーイベントログを出さないためだけの設定かもしれない。