背景アプリケーション システムの数が増え続けると、当初はアラームを発していなかったアクティブ スレッドが頻繁に (1 日に 2 回程度) アラームを発するようになります。この監視項目は、アラーム数が少なく、しきい値も高くない(50 以下)ものの、データベースのスレッド実行は運用・保守上、重視しなければならないポイントです。 通常、アラームは夜中に表示され、threads-running がラインを通過した後、どの接続が処理されているかを手動で記録することは不可能です。このデータを自動的に記録できる優れたツールは市場に存在しないため、現時点では zabbix のアクション機能が必要になります。 ザビックス設定1. 監視項目を定義する ここでは怠け者なので、percona テンプレートの Threads Running 監視項目を直接使用します。 2. トリガーを定義する Percona トリガー設定にも同じことが当てはまります。 3. アクションを作成する 以下の順序でアクションを作成します。 4. 行動条件 アクションは、条件 A、B、C、および D が満たされた場合にのみトリガーされます。ここでは、Zabbix への誤った呼び出しを避けるために、できるだけ詳細にフィルタリングするようにしてください。 5. 運用内容の改善 ここでは ssh メソッドが適用可能です。もちろん、タイプ列のカスタム スクリプト オプションを使用して、zabbix クライアントに sudo 権限を付与することもできます。 コマンドバーには /bin/sh /opt/connect.sh コマンドが入っています。これは分かりやすいですね。connect.sh スクリプトを直接呼び出します。具体的なスクリプトは次のテキストに添付されています。 6. zabbix-agentの設定を変更する 監視対象サーバーを入力してください: zabbix_agentd.conf を vim で開きます。 EnableRemoteCommands=1 #zabbixサーバーのリモートコマンドサービスzabbix-agentの再起動を許可するには、このパラメータを追加します ここまででzabbixに関する設定はすべて完了です。あとは書き込んだ処理スクリプトを/optディレクトリに置くだけです。 機能スクリプト今回実現したいのは、接続が50件を超えたときに、どのアカウント、どのIP、どのSQLが実行されているかなどの情報を出力することです。スクリプトは次のとおりです。 #!/bin/sh エクスポート PATH=$PATH:/usr/bin da=`日付 +%Y%m%d` dc=`日付 +%Y-%m-%d" "%H:%M:%S` echo $dc"------------------------------私は境界線です------------------------------------" >> /tmp/ok_$da.log /usr/local/mysql/bin/mysql -uroot -pXXX -e "select * from information_schema.PROCESSLIST where COMMAND != 'Sleep' order by TIME DESC;" >> /tmp/ok_$da.log 拡張機能Zabbix はアラームがトリガーされたときにスクリプトを呼び出すことができるので、より複雑なタスクを Zabbix で処理することは可能ですか? データベース接続、ロック、ストレージエンジンなどの情報 #!/bin/sh エクスポート PATH=$PATH:/usr/bin da=`日付 +%Y%m%d` dc=`日付 +%Y-%m-%d" "%H:%M:%S` echo $dc"------------------------------私は境界線です------------------------------------" >> /home/zabbix/engine_log/engine_log_$da.log /usr/bin/mysql -hlocalhost -uroot -pXXX -e "エンジン innodb ステータスを表示 \G;" >> /home/zabbix/engine_log/engine_log_$da.log echo -e "\n\n\n" >> /home/zabbix/engine_log/engine_log_$da.log echo $dc"-------------------------------私が境界線です------------------------------------" >> /home/zabbix/processlist/processlist_$da.log /usr/bin/mysql -hlocalhost -uroot -pXXX -e "select * from information_schema.processlist where time>=0 and command !='sleep' order by time desc \G;" >> /home/zabbix/processlist/processlist_$da.log echo -e "\n\n\n" >> /home/zabbix/processlist/processlist_$da.log echo $dc"------------------------------私は境界線です------------------------------------" >> /home/zabbix/lock/lock_$da.log /usr/bin/mysql -hlocalhost -uroot -pxxx -e Lo.Lock_type、lo.lock_table、lo.lock_index、tx.trx_query、tx.trx_tables_in_use、tx.trx_tables_locked、tx.trx_lows_locked情報ocks lo、information_schema.processlist p where lw.blocking_trx_id = tx.trx_id = tx.trx_mysql_thread_id and lo.lock_trx_id = tx.trx_id unionすべてTRX_STATE、TX.TRX_STARTED、TIMESTAMPDIFF(2番目、TX.TRX_STARTED、NOW())HURTER、LO.LOCK_MODE、LO.LOCK_INDEX、TX.TRX_QUERY、TX.TX_TABLES_USE、TX.TRX_LOCKED_LOCKED_TX.TRX_LOCKED_TABLE schema.innodb_trx tx、Information_schema.innodb_lock_waits lw、information_schema.innodb_locks lo、information_schema.processlist p where lw.requesting_trx_id = tx.trx_idおよびp.id = tx.trx_mysql_ded_ded_ded_ded_ded_ded_ded_ded_ded_ded_ded_ded_ \ g; ">> /home/zabbix/lock/lock_$da.log echo -e "\n\n\n" >> /home/zabbix/lock/lock_$da.log val=`/usr/bin/mysql -hlocalhost -uroot -pXXX -N -e "'general_log' のような変数を表示" |awk '{print $2}'` [ $val = 'OFF' ]の場合; それから /usr/bin/mysql -hlocalhost -uroot -pXXX -e "グローバル general_log=0 を設定します。" それ以外 終了0; フィ データベースに大きな負荷がかかっている場合、ロック情報、接続情報、ストレージ エンジン情報を記録できます。いわゆる高圧は、次のトリガー項目として定義できます。
これらはすべてトリガー条件として機能します。 長いSQLを強制終了する #!/bin/sh エクスポート PATH=$PATH:/usr/bin da=`日付 +%Y%m%d` dc=`日付 +%Y-%m-%d" "%H:%M:%S` ユーザー="root" パスワード="XXX" val=`mysql -u$user -p$password -N -e "time>=180 かつ command ='Query' かつ user in ('job_name','report') の場合、information_schema.processlist から count(*) を選択" | awk '{print $1}'` [ $val -gt 0 ]の場合; それから echo $dc"-------------------------------私が境界線です------------------------------------" >> /home/zabbix/kill_log/long_query_$da.log mysql -u$user -p$password -e "select * from information_schema.processlist where time>=180 and command ='Query' and user in ('job_name','report') order by time desc \G;" >> /home/zabbix/kill_log/long_query_$da.log echo -e "\n\n\n" >> /home/zabbix/kill_log/long_query_$da.log count=`mysql -u$user -p$password -N -e "time>=180 かつ command ='Query' かつ user in ('job_name','report')"` から information_schema.processlist の id を選択 $count 内の id の場合; する mysql -u$user -p$password -e "$id を削除" 終わり それ以外 終了0; フィ 場合によっては、一部のジョブやレポート SQL が長時間実行され、他の業務に影響を及ぼします。データベース接続が急増した場合、そのほとんどが大きな SQL がそこに殺到したことによるものであると簡単に判断できます。このとき、Zabbix はこのスクリプトを呼び出して、特別なアカウントによって 180 秒以上開始された SQL を強制終了できます。 SQL を強制終了する条件はスクリプト内でカスタマイズできます。 もちろん、処理に長い時間がかかることが分かっている SQL ステートメントは、データベースから実行する必要があります。 不要なログを削除する#!/bin/sh ログディレクトリ='/mysql/logs' binlog='/mysql/binlog' var_percent=`df -h |grep var|grep dev/sda|awk '{print $5}'|awk -F% '{print $1}'` [ -z $var_percent ] || [ $var_percent -lt 90 ]の場合 「気にしないで」とエコーする 終了 0 フィ 日付 >>$binlog/del_list.txt リスト=`ls -l --time-style='+%Y-%m-%d %H:%M:%S' $binlog/mysql-bin.0?????|awk '{print $6","$7","$8}'` $list 内の i について する filetime=`echo $i|awk -F "," '{print $1,$2}'` ファイルタイムスタンプ=`date -d "$filetime" +%s` cur_time = `日付 + %s` [ $(($cur_time - $filetimestamp)) -gt $((3*24*3600)) ];の場合 ファイル名=`echo $i|awk -F, '{print $3}'` echo "$filename は削除されます">>$binlog/del_list.txt /bin/rm $ファイル名 フィ 終わり if [ -f $logdir/mysql-slow.log ];then slow_log_size=`stat $logdir/mysql-slow.log|grep 'サイズ:'|awk -F ':' '{print $2}'|awk '{print $1}'` [ $slow_log_size -gt $((2*1024*1024*1024)) ];の場合 echo "$logdir/mysql-slow.log">>$logdir/del_list.txt /bin/rm $logdir/mysql-slow.log フィ フィ 場合によっては、binlog と slowlog が自動的に削除されるように設定されていないため、時間の経過とともにディスク領域がいっぱいになります。この時点で、/mysql の空きディスク容量監視項目を関連付け、しきい値を確認し、上記のスクリプトを呼び出して、不要な binlog と slowlog をクリーンアップすることができます。 マスターとスレーブが中断され、後で復元する必要がある場合など、binlog に依存する状況では、注意して使用する必要があります。 参考リンク:Zabbix を通じてデータベース接続情報といくつかの拡張機能を取得します: https://www.jb51.net/article/207412.htm zabbix によるデータベース接続情報と拡張機能の取得に関するこの記事はこれで終わりです。zabbix データベース接続に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Vueプロジェクトの最適化とパッケージ化の詳細な説明
>>: MySql で、存在しない場合は挿入し、存在する場合は更新する方法
コードをコピーコードは次のとおりです。 <スタイル タイプ="text/css&qu...
この記事では主に CentOS 上で MySQL マスタースレーブサーバーを構築する方法を紹介します...
効果効果は以下のとおりです実装のアイデアbox-shadow プロパティを使用して、複数の灰色の円...
序文: Integer は MySQL で最もよく使用されるフィールド型の 1 つで、通常は整数を格...
目次1. 4つのコンセプト1. JavaScriptはシングルスレッドです2. タスクキュー3. 同...
序文Linux のファイルまたはディレクトリの権限については、共通の rwx 権限を知っておく必要が...
目次イメージの作成ファイル構造Dockerファイルエントリポイント関数ファイルを生成するイメージを構...
01. コマンドの概要seq コマンドは整数のシーケンスを生成するために使用されます。 02. コマ...
読み取り専用入力を実現するには、無効と読み取り専用の 2 つの方法があります。当然、どちらの結果も読...
Vueベースこの機能の核となるアイデアは、JavaScript コードを通じてページ上のノードの左余...
目次1. 特徴2. 例3. オプション4. 基本的な文法5. ライフサイクル6. ルーティング管理 ...
ダウンロードしたバージョンは、Zip 解凍版、Windows システムです。長い間 Windows ...
<br />製品設計プロセス全体において、ビジュアルデザインとインタラクションデザインの...
前提条件gitをインストールする必要があるインストール手順1. リモートリポジトリからpyenvをク...
目次序文1. Tomcat クラスローダー構造図: 2. Tomcat のクラスロードプロセスの説明...