Zabbixを介してデータベース接続情報といくつかの拡張機能をすばやく取得します

Zabbixを介してデータベース接続情報といくつかの拡張機能をすばやく取得します

背景

アプリケーション システムの数が増え続けると、当初はアラームを発していなかったアクティブ スレッドが頻繁に (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;
フィ

データベースに大きな負荷がかかっている場合、ロック情報、接続情報、ストレージ エンジン情報を記録できます。いわゆる高圧は、次のトリガー項目として定義できます。

  • スレッド実行中: 実行中の接続が多すぎます
  • Innodb 行ロック待機: ロック待機時間が長すぎます
  • Com Select\Update\Insert\Delete: 運用環境での変更が多すぎます
  • 受信\送信ネットワークトラフィック: 受信トラフィックと送信トラフィックが異常な場合

これらはすべてトリガー条件として機能します。

長い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 をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Zabbix Agent2を使用してOracleデータベースを監視する方法
  • Zabbix を使用して Oracle データベースを監視する方法の詳細な説明
  • MongoDB データベースの状態を監視する Zabbix3.4 メソッド
  • Zabbix でデータベースをバックアップし、テーブルをパーティション分割する方法
  • Python スクリプト Zabbix カスタム キーを使用して Oracle 接続ステータスを監視する

<<:  Vueプロジェクトの最適化とパッケージ化の詳細な説明

>>:  MySql で、存在しない場合は挿入し、存在する場合は更新する方法

推薦する

nginx で仮想ホストを構成するための詳細な手順

仮想ホストは、インターネット上で実行されているサーバー ホストを複数の「仮想」ホストに分割する特殊な...

Vuexはセッションストレージデータを結合して、ページを更新するときにデータが失われる問題を解決します

目次序文1. 理由: 2. 解決策のアイデア: 1. ローカル保存方法: 2. 実装手順: 3. 最...

CSSアニメーションによるテーブルスクロールカルーセル効果の実装

前回の CSS 回転灯と同じ内容の CSS アニメーションの応用です。これは単なる別のアプリケーショ...

WindowsでcmdからDOSウィンドウに入り、MySQLデータベースにアクセスします。

1. win + R を押して cmd と入力し、DOS ウィンドウに入ります。 2. MySQL...

MacでMysqlのルートパスワードを忘れた場合の解決方法

長い間コンピューターで mysql を使用していなかったので、パスワードを忘れてしまいました。でも、...

Navicat は CSV データを MySQL にインポートします

この記事では、Navicatを使用してcsvデータをmysqlにインポートする方法を参考までに紹介し...

MySQL テーブルにおける非主キー列オーバーフロー監視の詳細な説明

今日もまた罠に落ちてしまいました。 私は以前MySQLの主キーオーバーフローに遭遇したことがあり、そ...

Vue 監視属性のグラフィック例の詳細な説明

目次リスナープロパティとは何ですか?リスニングプロパティと計算プロパティの違いは何ですか?監視プロパ...

カレンダー効果を実現するための Bootstrap+JQuery

この記事では、カレンダー効果を実現するためのBootstrap+Jqueryの具体的なコードを参考ま...

H5ウェイクアップアプリの実装方法と注意点のまとめ

目次序文APPメソッドにジャンプURLスキームメタタグユニバーサルリンクさまざまな使い方URLスキー...

MySQLオンラインDDLの使用に関する詳細な説明

目次文章LOCKパラメータアルゴリズムパラメータCOPY TABLE プロセスIN-PLACEプロセ...

Vue大画面表示適応方法

この記事では、vueの大画面表示適応の具体的なコードを参考までに紹介します。具体的な内容は以下のとお...

自作メニューをクリックする効果を実現するJavaScript

この記事では、自作メニューをクリックする効果を実現するためのJavaScriptの具体的なコードを参...

MySQL 5.7.20 の解凍バージョンをインストールするための詳細な手順 (2 つの方法)

Windows 64ビットでのMySQLのインストールについて説明します。5.7以降、MySQLの...