Heim Datenbank MySQL-Tutorial zabbix企业应用之Mysql主从监控_MySQL

zabbix企业应用之Mysql主从监控_MySQL

May 31, 2016 am 08:46 AM
mysql 企业 应用 模板 监控

现在我在给大家介绍一下如何监控mysql主从状态的。

下面是监控效果图:

1、Mysql Slave Status of 3306 Port

wKiom1O2BmGwXUTQAAM_7bxz6oY462.jpg

这个也是使用low level discovery进行监控,并且已经跟之前的lld监控mysql的模板合成了一个模板(所以我本文就只介绍mysql主从状态,其他的性能,这样使用一个模板既能监控mysql性能,又能自动的监控mysql主从状态,如果io或者sql任何一个状态不为yew,就会报警。

如何实现:

一、客户端

1、监控内容的json化

在客户端里,需要把监控的内容json化展示,然后服务端可以通过正则来过滤出结果

下面在是我的json监控mysql的json展示

wKioL1L5dd6hILXmAAB_Ll1Q_6E480.jpg

脚本内容如下:

<ol class="dp-rb">
<li class="alt"><span><span class="comment">#!/bin/bash  </span><span> </span></span></li>
<li>
<span class="comment">#Fucation:mysql low-level discovery  </span><span> </span>
</li>
<li class="alt">
<span class="comment">#Script_name mysql_low_discovery.sh  </span><span> </span>
</li>
<li><span>mysql() {   </span></li>
<li class="alt">
<span>            port=($(sudo netstat -tpln | awk -F </span><span class="string">"[ :]+"</span><span> </span><span class="string">'/[m]ysql/ && /0.0.0.0/ {print $5}'</span><span>))   </span>
</li>
<li>
<span>            printf </span><span class="string">'{\n'</span><span> </span>
</li>
<li class="alt">
<span>            printf </span><span class="string">'\t"data":[\n'</span><span> </span>
</li>
<li>
<span>               </span><span class="keyword">for</span><span> key </span><span class="keyword">in</span><span> ${!port[@]}   </span>
</li>
<li class="alt">
<span>                   </span><span class="keyword">do</span><span> </span>
</li>
<li>
<span>                       </span><span class="keyword">if</span><span> [[ </span><span class="string">"${#port[@]}"</span><span> -gt 1 && </span><span class="string">"${key}"</span><span> -ne </span><span class="string">"$((${#port[@]}-1))"</span><span> ]];</span><span class="keyword">then</span><span> </span>
</li>
<li class="alt">
<span>              socket=`ps aux|grep ${port[${key}]}|grep -v grep|awk -F </span><span class="string">'='</span><span> </span><span class="string">'{print $10}'</span><span>|cut -d </span><span class="string">' '</span><span> -f 1`   </span>
</li>
<li>
<span>                          printf </span><span class="string">'\t {\n'</span><span> </span>
</li>
<li class="alt">
<span>                          printf </span><span class="string">"\t\t\t\"{#MYSQLPORT}\":\"${port[${key}]}\"},\n"</span><span> </span>
</li>
<li>
<span>                     </span><span class="keyword">else</span><span> [[ </span><span class="string">"${key}"</span><span> -eq </span><span class="string">"((${#port[@]}-1))"</span><span> ]]   </span>
</li>
<li class="alt">
<span>              socket=`ps aux|grep ${port[${key}]}|grep -v grep|awk -F </span><span class="string">'='</span><span> </span><span class="string">'{print $10}'</span><span>|cut -d </span><span class="string">' '</span><span> -f 1`   </span>
</li>
<li>
<span>                          printf </span><span class="string">'\t {\n'</span><span> </span>
</li>
<li class="alt">
<span>                          printf </span><span class="string">"\t\t\t\"{#MYSQLPORT}\":\"${port[${key}]}\"}\n"</span><span> </span>
</li>
<li><span>                       fi  </span></li>
<li class="alt"><span>               done  </span></li>
<li>
<span>                          printf </span><span class="string">'\t ]\n'</span><span> </span>
</li>
<li class="alt">
<span>                          printf </span><span class="string">'}\n'</span><span> </span>
</li>
<li><span>}   </span></li>
<li class="alt">
<span class="variable">$1</span><span> </span>
</li>
</ol>
Nach dem Login kopieren

把此文件存放到/usr/local/zabbix/bin里,然后给与755权限,并修改用户与组为zabbix,同时允许zabbix用户无密码运行netstat

<ol class="dp-rb"><li class="alt"><span><span>echo </span><span class="string">"zabbix ALL=(root) NOPASSWD:/bin/netstat"</span><span>>>/etc/sudoers </span></span></li></ol>
Nach dem Login kopieren

#Disable requiretty

<ol class="dp-rb"><li class="alt"><span><span>sed -i </span><span class="string">'s/^Defaults.*.requiretty/#Defaults    requiretty/'</span><span> /etc/sudoers </span></span></li></ol>
Nach dem Login kopieren

不关闭的话,会无法获取数据,并且zabbix日志里报

wKioL1L5lG7DIj1bAADTHBgUAt4491.jpg

2、修改zabbix_agentd.conf文件

在zabbix_agentd.conf最后添加以下内容

<ol class="dp-rb">
<li class="alt"><span><span>UserParameter=zabbix_low_discovery[*],/bin/bash /usr/local/zabbix/bin/mysql_low_discovery.sh </span><span class="variable">$1</span><span>   </span></span></li>
<li>
<span>UserParameter=mysql_stats[*],mysql -h localhost -P </span><span class="variable">$1</span><span> -uzabbix -pzabbix -e </span><span class="string">"show global status"</span><span>|grep </span><span class="string">"\"</span><span>|cut  -f2   </span>
</li>
<li class="alt">
<span>UserParameter=mysql_stats_slave[*],mysql -h localhost -P </span><span class="variable">$1</span><span> -uzabbix -pzabbix  -e </span><span class="string">"show slave status\G"</span><span>|grep </span><span class="string">"\"</span><span>|awk </span><span class="string">'{if($NF=="Yes") {print 1} else {print 0}}'</span><span>  </span>
</li>
</ol>
Nach dem Login kopieren

3、测试

如果你能通过/usr/local/zabbix/bin/zabbix_get -s 127.0.0.1 -k zabbix_low_discovery[mysql]与/usr/local/zabbix/bin/zabbix_get -s 127.0.0.1 -k mysql_stats_slave[3306,Slave_IO_Running]、/usr/local/zabbix/bin/zabbix_get -s 127.0.0.1 -k mysql_stats_slave[3306,Slave_SQL_Running]命令获取数据就代表没问题,下面是我的测试结果

wKioL1O2CTnjlCd-AAEHXuUCuqU182.jpg

4、mysql授权

<ol class="dp-rb">
<li class="alt"><span><span>GRANT PROCESS,REPLICATION CLIENT ON *.* TO </span><span class="string">'zabbix'</span><span>@</span><span class="string">'localhost'</span><span> identified BY </span><span class="string">'zabbix'</span><span>;   </span></span></li>
<li><span>Flush privileges; </span></li>
</ol>
Nach dem Login kopieren

5、重启zabbix服务

<ol class="dp-rb">
<li class="alt"><span><span>ps -ef|grep zabbix|grep -v grep|awk </span><span class="string">'{print $2}'</span><span>|xargs kill -9   </span></span></li>
<li><span>/usr/local/zabbix/sbin/zabbix_agentd -c /usr/local/zabbix/conf/zabbix_agentd.conf </span></li>
</ol>
Nach dem Login kopieren

二、服务端

1、模板导入

把Template Mysql Auto Discovery导入到zabbix里(模板在附件),具体操作不介绍。

2、设置正则

在“管理”=》“一般”=》“正则表达式”里,选择“新的正则表达式”

然后设置类似如下

wKioL1L4Q6HhYgzHAAG68C970XY733.jpg

我这是运行3301到3309这9个mysql实例

3、主机关联模板

把需要监控mysql实例的主机管理模板即可监控,默认是3600秒后自动更新,如下图

wKioL1L4RA-i4NphAAJjI4nsqj4159.jpg

为什么设置3600秒?原因是如果设置时间过短,比如你设置60s,一个是服务器的压力大,一个是如果你检测的端口突然当掉了,还没有来的急报警,主机通过json来获取不到这个信息,就认为没有这个端口,模板里会自动关闭这个监控项的内容(默认保留30天,然后自动删除),这样报警功能就基本没有了,所以还是发现的间隔时间长一些比较好。

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie verwende ich MySQL-Backup und -Wiederherstellung in PHP? Wie verwende ich MySQL-Backup und -Wiederherstellung in PHP? Jun 03, 2024 pm 12:19 PM

Das Sichern und Wiederherstellen einer MySQL-Datenbank in PHP kann durch Befolgen dieser Schritte erreicht werden: Sichern Sie die Datenbank: Verwenden Sie den Befehl mysqldump, um die Datenbank in eine SQL-Datei zu sichern. Datenbank wiederherstellen: Verwenden Sie den Befehl mysql, um die Datenbank aus SQL-Dateien wiederherzustellen.

Wie optimiert man die MySQL-Abfrageleistung in PHP? Wie optimiert man die MySQL-Abfrageleistung in PHP? Jun 03, 2024 pm 08:11 PM

Die MySQL-Abfrageleistung kann durch die Erstellung von Indizes optimiert werden, die die Suchzeit von linearer Komplexität auf logarithmische Komplexität reduzieren. Verwenden Sie PreparedStatements, um SQL-Injection zu verhindern und die Abfrageleistung zu verbessern. Begrenzen Sie die Abfrageergebnisse und reduzieren Sie die vom Server verarbeitete Datenmenge. Optimieren Sie Join-Abfragen, einschließlich der Verwendung geeigneter Join-Typen, der Erstellung von Indizes und der Berücksichtigung der Verwendung von Unterabfragen. Analysieren Sie Abfragen, um Engpässe zu identifizieren. Verwenden Sie Caching, um die Datenbanklast zu reduzieren. Optimieren Sie den PHP-Code, um den Overhead zu minimieren.

Wie füge ich mit PHP Daten in eine MySQL-Tabelle ein? Wie füge ich mit PHP Daten in eine MySQL-Tabelle ein? Jun 02, 2024 pm 02:26 PM

Wie füge ich Daten in eine MySQL-Tabelle ein? Mit der Datenbank verbinden: Stellen Sie mit mysqli eine Verbindung zur Datenbank her. Bereiten Sie die SQL-Abfrage vor: Schreiben Sie eine INSERT-Anweisung, um die einzufügenden Spalten und Werte anzugeben. Abfrage ausführen: Verwenden Sie die Methode query(), um die Einfügungsabfrage auszuführen. Bei Erfolg wird eine Bestätigungsmeldung ausgegeben.

Wie erstelle ich eine MySQL-Tabelle mit PHP? Wie erstelle ich eine MySQL-Tabelle mit PHP? Jun 04, 2024 pm 01:57 PM

Das Erstellen einer MySQL-Tabelle mit PHP erfordert die folgenden Schritte: Stellen Sie eine Verbindung zur Datenbank her. Erstellen Sie die Datenbank, falls sie nicht vorhanden ist. Wählen Sie eine Datenbank aus. Tabelle erstellen. Führen Sie die Abfrage aus. Schließen Sie die Verbindung.

Wie verwende ich gespeicherte MySQL-Prozeduren in PHP? Wie verwende ich gespeicherte MySQL-Prozeduren in PHP? Jun 02, 2024 pm 02:13 PM

So verwenden Sie gespeicherte MySQL-Prozeduren in PHP: Verwenden Sie PDO oder die MySQLi-Erweiterung, um eine Verbindung zu einer MySQL-Datenbank herzustellen. Bereiten Sie die Anweisung zum Aufrufen der gespeicherten Prozedur vor. Führen Sie die gespeicherte Prozedur aus. Verarbeiten Sie die Ergebnismenge (wenn die gespeicherte Prozedur Ergebnisse zurückgibt). Schließen Sie die Datenbankverbindung.

So beheben Sie den Fehler „mysql_native_password nicht geladen' unter MySQL 8.4 So beheben Sie den Fehler „mysql_native_password nicht geladen' unter MySQL 8.4 Dec 09, 2024 am 11:42 AM

Eine der wichtigsten Änderungen, die in MySQL 8.4 (der neuesten LTS-Version von 2024) eingeführt wurden, besteht darin, dass das Plugin „MySQL Native Password“ nicht mehr standardmäßig aktiviert ist. Darüber hinaus entfernt MySQL 9.0 dieses Plugin vollständig. Diese Änderung betrifft PHP und andere Apps

Wie lösche ich Daten aus einer MySQL-Tabelle mit PHP? Wie lösche ich Daten aus einer MySQL-Tabelle mit PHP? Jun 05, 2024 pm 12:40 PM

PHP bietet die folgenden Methoden zum Löschen von Daten in MySQL-Tabellen: DELETE-Anweisung: Wird zum Löschen von Zeilen, die Bedingungen entsprechen, aus der Tabelle verwendet. TRUNCATETABLE-Anweisung: Wird zum Löschen aller Daten in der Tabelle verwendet, einschließlich automatisch inkrementierter IDs. Praxisfall: Sie können Benutzer mithilfe von HTML-Formularen und PHP-Code aus der Datenbank löschen. Das Formular übermittelt die Benutzer-ID und der PHP-Code verwendet die DELETE-Anweisung, um den Datensatz, der der ID entspricht, aus der Benutzertabelle zu löschen.

Vergleich von C++-Vorlagen und Generika? Vergleich von C++-Vorlagen und Generika? Jun 04, 2024 pm 04:24 PM

Der Unterschied zwischen Vorlagen und Generika in C++: Vorlagen: zur Kompilierzeit definiert, klar typisiert, hohe Effizienz und kleine Codegröße. Generics: Laufzeittypisierung, abstrakte Schnittstelle, bietet Flexibilität, geringe Effizienz.

See all articles