转 zabbix debug and zabbix使用percona插件监控mysql zabbix使用percona插件监控mysql http://www.manongjc.com/article/18964.html Percona Monitoring Plugins for Zabbix模板 用于Mysql Replication的Slave Running和Slave Stopped监控项的数据不正确 Zabbix 3.2.6-Mysql多实例监控-Percona Monitoring Plugins自动发现 1.多实例 2. zabbix  自动发现脚本文件mysql_low_discovery.sh   3. 修改ss_get_mysql_stats.php脚本 4. 修改userparameter_percona_mysql.conf 配置文件 5.导入模板 附件:

##########

https://www.cnblogs.com/keithtt/p/8542987.html

 

1、添加percona仓库。

# yum install -y https://mirrors.tuna.tsinghua.edu.cn/percona/yum/percona-release-latest.noarch.rpm

2、安装插件。

# yum -y install percona-zabbix-templates
# rpm -ql percona-zabbix-templates
/var/lib/zabbix/percona
/var/lib/zabbix/percona/scripts
/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh
/var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php
/var/lib/zabbix/percona/templates
/var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf
/var/lib/zabbix/percona/templates/zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.8.xml

3、这个项目是php写的,需要安装php和php-mysql。(这个在官网有说明)

# yum install -y php php-mysql

4、拷贝配置文件到配置目录,并重启zabbix-agent。

# cp -a /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/
# rm -f /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
# service zabbix-agent restart

5、授权监控用户,使其能获取数据。

# mysql -uroot -p
> grant all privileges on *.* to zabbix@localhost identified by 'PASS';
> flush privileges;
> quit;

6、修改程序里面的用户密码,使其能连接到mysql。

# vim /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php
$mysql_user = 'zabbix';
$mysql_pass = 'PASS';

7、修改监控脚本。脚本里面是直接执行mysql命令获取数据的,但是没有指定用户名和密码,导致连不上数据库。为mysql命令加上用户名密码参数即可。

# vim /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh
RES=`HOME=~zabbix mysql -uzabbix -pPASS -e 'SHOW SLAVE STATUSG' 2> /dev/null | egrep '(Slave_IO_Running|Slave_SQL_Running):' | awk -F: '{print $2}' | tr '
' ','`

或者更简单一点,直接添加一个mysql的客户端验证配置。

# vim ~zabbix/.my.cnf
[client]
user = zabbix
password = PASS

8、测试脚本是否能获取到数据。

# /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg
16
# /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh jg
0
# sudo -u zabbix -H /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh running-slave
1
# sudo -u zabbix zabbix_get -s 10.0.1.61 -k 'proc.num[mysqld]'
1
# sudo -u zabbix zabbix_get -s 10.0.1.61 -k 'mysql.ping'
1

9、导入模板。在这里踩到坑,安装包提供的插件版本是1.1.8,导入过程中报错。经过一番查询,可以使用1.1.6。

可以从这里下载1.1.6版本的文件:https://www.percona.com/downloads/percona-monitoring-plugins/

按理说,导入模板之后,链接到主机就可以查看到数据了。不过,等了很久一直没数据,又是经过一番查询...

插件创建了一个状态文件,然后从中读取数据,但是这个文件第一次启动的时候所属用户是root,而zabbix的启动用户是zabbix,没有权限读取这个文件,所以页面上一直没有数据。

解决办法很简单,删除这个文件即可,程序会自动创建一个权限正确的新文件。

# rm -f /tmp/localhost-mysql_cacti_stats.txt

10、到这里就可以看到数据了。

转 zabbix debug and zabbix使用percona插件监控mysql
zabbix使用percona插件监控mysql
http://www.manongjc.com/article/18964.html
Percona Monitoring Plugins for Zabbix模板 用于Mysql Replication的Slave Running和Slave Stopped监控项的数据不正确
Zabbix 3.2.6-Mysql多实例监控-Percona Monitoring Plugins自动发现
1.多实例
2. zabbix  自动发现脚本文件mysql_low_discovery.sh  
3. 修改ss_get_mysql_stats.php脚本
4. 修改userparameter_percona_mysql.conf 配置文件
5.导入模板
附件:


补充:

如果把默认端口3306改成了别的端口,也会造成报错读取不到数据。

在/var/lib/zabbix/percona/scripts目录下有两个脚本,经过仔细查看,发现get_mysql_stats_wrapper.sh在指定读取的状态文件时路径是写的是CACHEFILE="/tmp/$HOST-mysql_cacti_stats.txt",而在/tmp/目录下是一个带端口的文件localhost-mysql_cacti_stats.txt:3310,这样肯定就读不到了。然后去找文件是在哪里生成的,查看另一个php脚本,果然做了判断处理,端口不是3306的话就在文件名后面加上端口号。

问题找到了,将源码中的判断部分去掉就好了。

# vim /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php
$cache_file = "$cache_dir/$sanitized_host-mysql_cacti_stats.txt" . ($port != 3306 ? ":$port" : '');
改成:
$cache_file = "$cache_dir/$sanitized_host-mysql_cacti_stats.txt";

参考:
https://www.percona.com/doc/percona-monitoring-plugins/LATEST/zabbix/index.html
https://blog.csdn.net/liang_operations/article/details/81868668

######sample 3 小bug 

http://www.manongjc.com/article/18964.html

Percona Monitoring Plugins for Zabbix模板 用于Mysql Replication的Slave Running和Slave Stopped监控项的数据不正确

时间:2018-11-16
本文章向大家介绍Percona Monitoring Plugins for Zabbix模板 用于Mysql Replication的Slave Running和Slave Stopped监控项的数据不正确,需要的朋友可以参考一下

今天小试了一把Percona Monitoring Plugins for Zabbix模板,自己辛辛苦苦写的那一大堆Python脚本,貌似用这个模板全都覆盖到了。
但是,我也发现最新的版本percona-monitoring-plugins_1.1.8也还是存在一个问题,那就是用于Mysql Replication的Slave Running和Slave Stopped监控项的数据不正确(一般情况下,两项数据均维持在0)。
经检查相关模板的脚本文件ss_get_mysql_stats.php,发现用于获取Slave Running和Slave Stopped监控项的脚本逻辑有问题。

相关脚本内容为:

         $status['slave_lag']        = $row['seconds_behind_master'];
         ......
         $status['slave_running'] = ($row['slave_sql_running'] == 'Yes')
            ? $status['slave_lag'] : 0;
         $status['slave_stopped'] = ($row['slave_sql_running'] == 'Yes')
            ? 0 : $status['slave_lag'];

可见当slave_sql_running为Yes时,slave_running的取值是seconds_behind_master,slave_stopped的取值是0。
当slave_sql_running为No时,slave_running的取值是0,slave_stopped的取值是seconds_behind_master。
这里我将脚本中$status['slave_lag']更改为了1:

         $status['slave_lag']        = $row['seconds_behind_master'];
         ......
         $status['slave_running'] = ($row['slave_sql_running'] == 'Yes')
            ? 1 : 0;
         $status['slave_stopped'] = ($row['slave_sql_running'] == 'Yes')
            ? 0 : 1;

修改后监控数据正常了。

############

https://blog.csdn.net/u011731378/article/details/79092259

    • Zabbix Agent Log

       
      Dear All,

      All of my Windows hosts (Windows Server 2008 R2 & Windows Server 2012) both have no zabbix_agentd.log file at all. I don't know why. Below is configuration of one host:
       
      # This is a config file for Zabbix Agent (Windows)
      # To get more information about Zabbix, go to http://www.zabbix.com

      ############ GENERAL PARAMETERS #################

      ### Option: LogFile
      # Name of log file.
      # If not set, Windows Event Log is used.
      #
      # Mandatory: no
      # Default:
      # LogFile=

      LogFile=C:Program Filesabbix Agentabbix_agentd.log

      ### Option: LogFileSize
      # Maximum size of log file in MB.
      # 0 - disable automatic log rotation.
      #
      # Mandatory: no
      # Range: 0-1024
      # Default:
      # LogFileSize=1

      ### Option: DebugLevel
      # Specifies debug level
      # 0 - no debug
      # 1 - critical information
      # 2 - error information
      # 3 - warnings
      # 4 - for debugging (produces lots of information)
      #
      # Mandatory: no
      # Range: 0-4
      # Default:
      # DebugLevel=3
      DebugLevel=0

      ### Option: SourceIP
      # Source IP address for outgoing connections.
      #
      # Mandatory: no
      # Default:
      # SourceIP=

      ### Option: EnableRemoteCommands
      # Whether remote commands from Zabbix server are allowed.
      # 0 - not allowed
      # 1 - allowed
      #
      # Mandatory: no
      # Default:
      EnableRemoteCommands=1

      ### Option: LogRemoteCommands
      # Enable logging of executed shell commands as warnings.
      # 0 - disabled
      # 1 - enabled
      #
      # Mandatory: no
      # Default:
      # LogRemoteCommands=0

      ##### Passive checks related

      ### Option: Server
      # List of comma delimited IP addresses (or hostnames) of Zabbix servers.
      # Incoming connections will be accepted only from the hosts listed here.
      # No spaces allowed.
      # If IPv6 support is enabled then '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' are treated equally.
      #
      # Mandatory: no
      # Default:
      # Server=

      Server=10.10.20.85

      ### Option: ListenPort
      # Agent will listen on this port for connections from the server.
      #
      # Mandatory: no
      # Range: 1024-32767
      # Default:
      ListenPort=10050

      ### Option: ListenIP
      # List of comma delimited IP addresses that the agent should listen on.
      # First IP address is sent to Zabbix server if connecting to it to retrieve list of active checks.
      #
      # Mandatory: no
      # Default:
      # ListenIP=0.0.0.0

      ### Option: StartAgents
      # Number of pre-forked instances of zabbix_agentd that process passive checks.
      # If set to 0, disables passive checks and the agent will not listen on any TCP port.
      #
      # Mandatory: no
      # Range: 0-100
      # Default:
      # StartAgents=3

      ##### Active checks related

      ### Option: ServerActive
      # List of comma delimited IP转 zabbix debug and zabbix使用percona插件监控mysql
zabbix使用percona插件监控mysql
http://www.manongjc.com/article/18964.html
Percona Monitoring Plugins for Zabbix模板 用于Mysql Replication的Slave Running和Slave Stopped监控项的数据不正确
Zabbix 3.2.6-Mysql多实例监控-Percona Monitoring Plugins自动发现
1.多实例
2. zabbix  自动发现脚本文件mysql_low_discovery.sh  
3. 修改ss_get_mysql_stats.php脚本
4. 修改userparameter_percona_mysql.conf 配置文件
5.导入模板
附件:ort (or hostname转 zabbix debug and zabbix使用percona插件监控mysql
zabbix使用percona插件监控mysql
http://www.manongjc.com/article/18964.html
Percona Monitoring Plugins for Zabbix模板 用于Mysql Replication的Slave Running和Slave Stopped监控项的数据不正确
Zabbix 3.2.6-Mysql多实例监控-Percona Monitoring Plugins自动发现
1.多实例
2. zabbix  自动发现脚本文件mysql_low_discovery.sh  
3. 修改ss_get_mysql_stats.php脚本
4. 修改userparameter_percona_mysql.conf 配置文件
5.导入模板
附件:ort) pairs of Zabbix servers for active checks.
      # If port is not specified, default port is used.
      # IPv6 addresses must be enclosed in square brackets if port for that host is specified.
      # If port is not specified, square brackets for IPv6 addresses are optional.
      # If this parameter is not specified, active checks are disabled.
      # Example: ServerActive=127.0.0.1:20051,zabbix.domain,[::1]:30051,::1,[12fc::1]
      #
      # Mandatory: no
      # Default:
      # ServerActive=

      ServerActive=127.0.0.1

      ### Option: Hostname
      # Unique, case sensitive hostname.
      # Required for active checks and must match hostname as configured on the server.
      # Value is acquired from HostnameItem if undefined.
      #
      # Mandatory: no
      # Default:
      Hostname=NI-HOST01

      ### Option: HostnameItem
      # Item used for generating Hostname if it is undefined.
      # Ignored if Hostname is defined.
      #
      # Mandatory: no
      # Default:
      # HostnameItem=system.hostname

      ### Option: RefreshActiveChecks
      # How often list of active checks is refreshed, in seconds.
      #
      # Mandatory: no
      # Range: 60-3600
      # Default:
      # RefreshActiveChecks=120

      ### Option: BufferSend
      # Do not keep data longer than N seconds in buffer.
      #
      # Mandatory: no
      # Range: 1-3600
      # Default:
      # BufferSend=5

      ### Option: BufferSize
      # Maximum number of values in a memory buffer. The agent will send
      # all collected data to Zabbix server or Proxy if the buffer is full.
      #
      # Mandatory: no
      # Range: 2-65535
      # Default:
      # BufferSize=100

      ### Option: MaxLinesPerSecond
      # Maximum number of new lines the agent will send per second to Zabbix Server
      # or Proxy processing 'log', 'logrt' and 'eventlog' active checks.
      # The provided value will be overridden by the parameter 'maxlines',
      # provided in 'log', 'logrt' or 'eventlog' item keys.
      #
      # Mandatory: no
      # Range: 1-1000
      # Default:
      # MaxLinesPerSecond=100

      ############ ADVANCED PARAMETERS #################

      ### Option: Alias
      # Sets an alias for parameter. It can be useful to substitute long and complex parameter name with a smaller and simpler one.
      # For example, if you wish to retrieve paging file usage in percents from the server,
      # you may use parameter "perf_counter[Paging File(_Total)\% Usage]", or you may define an alias by adding the following line to configuration file
      # Alias = pg_usage转 zabbix debug and zabbix使用percona插件监控mysql
zabbix使用percona插件监控mysql
http://www.manongjc.com/article/18964.html
Percona Monitoring Plugins for Zabbix模板 用于Mysql Replication的Slave Running和Slave Stopped监控项的数据不正确
Zabbix 3.2.6-Mysql多实例监控-Percona Monitoring Plugins自动发现
1.多实例
2. zabbix  自动发现脚本文件mysql_low_discovery.sh  
3. 修改ss_get_mysql_stats.php脚本
4. 修改userparameter_percona_mysql.conf 配置文件
5.导入模板
附件:erf_counter[Paging File(_Total)\% Usage]
      # After that you can use parameter name "pg_usage" to retrieve the same information.
      # You can specify as many "Alias" records as you wish.
      # Aliases cannot be used for parameters defined in "PerfCounter" configuration file records.
      #
      # Mandatory: no
      # Range:
      # Default:

      ### Option: Timeout
      # Spend no more than Timeout seconds on processing
      #
      # Mandatory: no
      # Range: 1-30
      # Default:
      # Timeout=3

      ### Option: PerfCounter
      # Syntax: <parameter_name>,"<perf_counter_path>",<period>
      # Defines new parameter <parameter_name> which is an average value for system performance counter <perf_counter_path> for the specified time period <period> (in seconds).
      # For example, if you wish to receive average number of processor interrupts per second for last minute, you can define new parameter "interrupts" as following:
      # PerfCounter = interrupts,"Processor(0)Interrupts/sec",60
      # Please note double quotes around performance counter path.
      # Samples for calculating average value will be taken every second.
      # You may run "typeperf -qx" to get list of all performance counters available in Windows.
      #
      # Mandatory: no
      # Range:
      # Default:

      ### Option: Include
      # You may include individual files in the configuration file.
      #
      # Mandatory: no
      # Default:
      # Include=

      # Include=c:zabbixzabbix_agentd.userparams.conf
      # Include=c:zabbixzabbix_agentd

      ####### USER-DEFINED MONITORED PARAMETERS #######

      ### Option: UnsafeUserParameters
      # Allow all characters to be passed in arguments to user-defined parameters.
      # 0 - do not allow
      # 1 - allow
      #
      # Mandatory: no
      # Range: 0-1
      # Default:
      # UnsafeUserParameters=0

      ### Option: UserParameter
      # User-defined parameter to monitor. There can be several user-defined parameters.
      # Format: UserParameter=<key>,<shell command>
      # Note that shell command must not return empty string or EOL only.
      # Example: UserParameter=system.test,echo 1
      #UserParameter=system.test,echo 1
       
    • 转 zabbix debug and zabbix使用percona插件监控mysql
zabbix使用percona插件监控mysql
http://www.manongjc.com/article/18964.html
Percona Monitoring Plugins for Zabbix模板 用于Mysql Replication的Slave Running和Slave Stopped监控项的数据不正确
Zabbix 3.2.6-Mysql多实例监控-Percona Monitoring Plugins自动发现
1.多实例
2. zabbix  自动发现脚本文件mysql_low_discovery.sh  
3. 修改ss_get_mysql_stats.php脚本
4. 修改userparameter_percona_mysql.conf 配置文件
5.导入模板
附件:
      Banned
       
      •  May 2008
      •  1582
      Believe it or not, Zabbix is case sensitive, even on Windows. So your log directory and file name: C:Program Filesabbix Agentabbix_agentd.log need to be cased appropriately.

      I don't know if that is your issue or not, but I ran into that when I was first starting out with Zabbix.

      And you have DebugLevel=0 Put that at 3 and you will start seeing a log, I suspect.
      Last edited by tchjts118-06-2013, 07:27.
       
    • 转 zabbix debug and zabbix使用percona插件监控mysql
zabbix使用percona插件监控mysql
http://www.manongjc.com/article/18964.html
Percona Monitoring Plugins for Zabbix模板 用于Mysql Replication的Slave Running和Slave Stopped监控项的数据不正确
Zabbix 3.2.6-Mysql多实例监控-Percona Monitoring Plugins自动发现
1.多实例
2. zabbix  自动发现脚本文件mysql_low_discovery.sh  
3. 修改ss_get_mysql_stats.php脚本
4. 修改userparameter_percona_mysql.conf 配置文件
5.导入模板
附件:
      Junior Member
       
      •  Sep 2011
      •  29
       
       
      Originally posted by tchjts1 View Post
      Believe it or not, Zabbix is case sensitive, even on Windows. So your log directory and file name: C:Program Filesabbix Agentabbix_agentd.log need to be cased appropriately.

      I don't know if that is your issue or not, but I ran into that when I was first starting out with Zabbix.

      And you have DebugLevel=0 Put that at 3 and you will start seeing a log, I suspect.
      Thanks. The problem is solved with set value for parameter DebugLevel 转 zabbix debug and zabbix使用percona插件监控mysql
zabbix使用percona插件监控mysql
http://www.manongjc.com/article/18964.html
Percona Monitoring Plugins for Zabbix模板 用于Mysql Replication的Slave Running和Slave Stopped监控项的数据不正确
Zabbix 3.2.6-Mysql多实例监控-Percona Monitoring Plugins自动发现
1.多实例
2. zabbix  自动发现脚本文件mysql_low_discovery.sh  
3. 修改ss_get_mysql_stats.php脚本
4. 修改userparameter_percona_mysql.conf 配置文件
5.导入模板
附件:
       
       
       
      #########sampl 2    (主动轮询 和 被动接受 )
      https://blog.csdn.net/adparking/article/details/7825183

      怎么知道zabbix server是主动轮询收集信息还是被动接受zabbix agent的信息
      zabbix_agent [TCP 主动轮询]
      zabbix_sender [UDP 被动接受代理收集的系统信息]

      一、从网上下载相应脚本与XML定义文件。

      下载地址:http://www.zabbix.com/wiki/howto/monitor/db/mysql/extensive_mysql_monitoring_including_replication?s[]=mysql

      Template_MySQL_Server.xml

      Template_MySQL_Replication_Master.xml

      Template_MySQL_Replication_Slave.xml

      和执行脚本:mysql.php

      二、把mysql.php上传至配置文件目录/etc/zabbix/

      chmod 755 mysql.php

      三、修改mysql.php文件

      根据本机环境。

      第一行加入:#!/usr/bin/php

      在最后一行加入:?>

      关闭调试:define('DEBUG',true); 为 define('DEBUG',False);

      修改日志、数据文件路径:

      define('LOG',"/tmp/zabbix_".SYSTEM.".log");
      define('DAT',"/tmp/zabbix_".SYSTEM.".dat");
      define('UTIME',"/tmp/.zabbix_".SYSTEM.".utime");
      define('DTIME',"/tmp/.zabbix_".SYSTEM.".dtime");

      修改:define('SYSTEM','mysql'.(DEBUG ? "-debug" : "")); 为:define('SYSTEM','mysql');

      打开系统日志功能://system("zabbix_sender -z $server -i ".DAT." >> ".LOG); 为:system("zabbix_sender -z $server -i ".DAT." >> ".LOG);

      注释file_put_contents(DAT,"$server $host 10051 ".SYSTEM.".$var $val ",FILE_APPEND);且

      下面增加以下文字:
      $cmd = "zabbix_sender -c $config_path -k ".SYSTEM.".$var -o $val -vv";
      file_put_contents(DAT,"$cmd ",FILE_APPEND);
      exec($cmd);

      四、在zabbix_agentd.conf配置文件中加入

      UserParameter=mysql.daily,php /etc/zabbix/mysql.php daily 用户名 密码
      UserParameter=mysql.live,php /etc/zabbix/mysql.php live 用户名 密码

      daily:每天执行一次。【由zabbix_server轮询发起,默认86640秒即一天 zabbix agent类型 UDP协议】

      live:按指定时间执行一次。【由zabbix_server轮询发起,默认120秒 zabbix agent类型 UDP协议】

      php :执行php文件

      /etc/zabbix/mysql.php:mysql.php文件所在的文件路径

      用户名 密码:登录mysql数据库的账户与密码

      重启zabbix_agentd

      切记修改/etc/profile 或者 /home/zabbix/.bash_profile 在文件尾部添加以下文字

      /home/zabbix/.bash_profile

      PATH=$PATH:$HOME/bin:/usr/local/webserver/mysql/bin:/usr/local/webserver/php/bin:/usr/local/webserver/zabbix_agents/bin
      export PATH

      /etc/profile

      PATH=$PATH:/usr/local/webserver/mysql/bin:/usr/local/webserver/php/bin:/usr/local/webserver/zabbix_agents/bin
      export PATH

      mysql.php 监控文件里面的命令执行失败【/tmp下的日志文件属主权限、用户的.bash_profile是否导入 php zabbix_sender mys】

      问题:
      Zabbix agent (active)  走 UDP 协议  NGINX 添加的 zabbix_agentd 服务后,且通过zabbix_get可以获取数据,但是无法入库。解决方法看下面大红字

      修改防火墙设置 vi /etc/sysconfig/iptables

      【zabbix-agent    10050/tcp               # Zabbix Agent
      zabbix-agent    10050/udp               # Zabbix Agent
      zabbix-trapper  10051/tcp               # Zabbix Trapper
      zabbix-trapper  10051/udp               # Zabbix Trapper

      -A INPUT -p tcp -s 110.80.20.XXX-m multiport --dports 10050,10051 -j ACCEPT
      -A INPUT -p udp -s 110.80.20.XXXX-m multiport --dports 10050,10051 -j ACCEPT

      五、在zabbix web管理界面导入xml文件

      配置-导入/导出-浏览

      六、在主机内增加指定模板

      配置-主机-具体主机名-Link with Template-新增-刚导入的模板。

      模板分为三种:

      template MYSQL_server:监控项最全【下载文件有备注信息、且若干个tigger有重复会导致导入失败】

      由于监控的item很多所以必须修改 Timeout 系统最大值 30秒。默认3秒。范围 1-30秒 否则服务端测试时会

      Timeout while executing a shell script 当然如果项目在30秒无法发送完毕也将停止,所以导致发送不全面

      ### Option: Timeout
      #       Spend no more than Timeout seconds on processing
      #
      # Mandatory: no
      # Range: 1-30
      # Default:
      Timeout=30

      template MYSQL_Replication_Master:只监控主要参数,监控功能相对最少

      template MYSQL_Replication_Slave:主要针对性能方面的监控。

      七、测试监控是否成功

      删除 定时文件

      rm /tmp/.zabbix_mysql-debug.dtime;

      取的每天的监控数据

      php /etc/zabbix/mysql.php daily root *****

      取即时数据

      php /etc/zabbix/mysql.php live root *****

      查看日志

      cat /tmp/zabbix_mysql.log

      Info from server: "Processed 1 Failed 0 Total 1 Seconds spent 0.006261"
      sent: 1; skipped: 0; total: 1
      Info from server: "Processed 1 Failed 0 Total 1 Seconds spent 0.004047"
      sent: 1; skipped: 0; total: 1
      Info from server: "Processed 0 Failed 106 Total 106 Seconds spent 0.045790"
      sent: 106; skipped: 0; total: 106

      看到上述为成功

      查看DAT的文件。上传的数据

      cat /tmp/zabbix_mysql.dat

      八、最后查看zabbix 的最新数据

      这时会看到新增加的监控项。

      接下去就是绘制图形。

      ####sample 3

      https://www.cnblogs.com/guoyishen/p/6891953.html

      Zabbix 3.2.6-Mysql多实例监控-Percona Monitoring Plugins自动发现

       
      mysql多实例监控实录
       
      系统环境:
      cat /etc/redhat-release
      CentOS Linux release 7.3.1611 (Core)
      内核版本:
      uname -r
      3.10.0-514.el7.x86_64
      docker版本:
      docker -v
      Docker version 1.12.6, build 3a094bd/1.12.6
      docker 相关镜像版本:
      docker.io/zabbix/zabbix-web-nginx-mysql latest
      docker.io/zabbix/zabbix-server-mysql latest
      docker.io/mysql 5.7
      被监控mysql应用版本:
      mysql-5.7.17-linux-glibc2.5-x86_64
      Percona Monitoring Plugins版本:
       
      写在最前:如果zabbix server和zabbix agent已经通过其他方式安装,可以直接跳过1、2步,直接从第3步开始看。
       
      1、zabbix服务端我们运行在docker容器内
      所以服务器端先安装docker服务
      yum install -y epel-release
      yum install -y docker #centos6.x版本的命令是yum install -y docker-io
       
      然后运行docker服务
      systemctl start docker
      docker加入开机自启动
      systemctl enable docker
      查看docker是否成功启动
      systemctl status docker
      注:使用docker需要使用加速器,否则那龟速,自己体会吧。加速器daocloud和阿里云都可以,我使用的前者。
       
      2.安装相关容器
      2.1. mysql 容器
      docker run --name mysql-server -t
            -e MYSQL_DATABASE="zabbix"
            -e MYSQL_USER="zabbix"
            -e MYSQL_PASSWORD="ywwd.net"
            -e MYSQL_ROOT_PASSWORD="ywwd.net"
            -v /data/container/mysql/zabbix:/var/lib/mysql
            -v /etc/localtime:/etc/localtime:ro
            --restart=always
            -d mysql:5.7
            --character-set-server=utf8 --collation-server=utf8_general_ci --sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
       
      2.2. zabbix-server 容器
      docker run --name zabbix-server-mysql -t
            -e DB_SERVER_HOST="mysql-server"
            -e MYSQL_DATABASE="zabbix"
            -e MYSQL_USER="zabbix"
            -e MYSQL_PASSWORD="ywwd.net"
            -e MYSQL_ROOT_PASSWORD="ywwd.net"
            --link mysql-server:mysql
            -p 10051:10051 --restart=always
            -v /etc/localtime:/etc/localtime:ro
            -d zabbix/zabbix-server-mysql:latest
       
      2.3. zabbix-web 容器(nginx)
      docker run --name zabbix-web-nginx-mysql -t
            -e DB_SERVER_HOST="mysql-server"
            -e MYSQL_DATABASE="zabbix"
            -e MYSQL_USER="zabbix"
            -e MYSQL_PASSWORD="ywwd.net"
            -e MYSQL_ROOT_PASSWORD="ywwd.net"
            --link mysql-server:mysql
            --link zabbix-server-mysql:zabbix-server
            -v /etc/localtime:/etc/localtime:ro
            -p 80:80
            --restart=always
            -d zabbix/zabbix-web-nginx-mysql:latest
       
      注意:这里有个小问题,zabbix-web-nginx-mysql的启动脚本/run_zabbix_component.sh中,指定了时区,不是中国的Asia/Shanghai,所以我们要进入zabbix-web-nginx-mysql进行修改
      2.4. 修改zabbix-web的时区
      docker exec -it zabbix-web-nginx-mysql /bin/bash
      TZ=${TZ:-"Asia/Shanghai"} 这里改为Asia/Shanghai,否则zabbix-web端的时间会慢5个小时
      sed -in 's#Europe/Riga#Asia/Shanghai#g' /run_zabbix_component.sh
      修改时区后,需要重启容器
      docker restart zabbix-web-nginx-mysql
      2.5. 在firewall防火墙放开zabbix-server和zabbix-agent的服务端口号
      firewall-cmd --permanent --add-port=10050-10051/tcp
      #--permanent永久生效,10050zabbix-agent服务端口,10051zabbix-server服务端口
      firewall-cmd --reload
      #更改后需要重新加载firewall防火墙
      firewall-cmd --list-all
      #最后查看配置是否生效
       
      这样zabbix-server端就已经安装完毕
      接下来客户端我们采用rpm包进行安装
      rpm -ivh zabbix-agent-3.2.6-1.el7.x86_64.rpm
      同样需要放开zabbix-agent端口
      firewall-cmd --permanent --add-port=10050/tcp
      firewall-cmd --reload
       
      然后对zabbix-agent端进行配置
      egrep -v '^$|^#' /etc/zabbix/zabbix_agentd.conf
      PidFile=/var/run/zabbix/zabbix_agentd.pid
      LogFile=/var/log/zabbix/zabbix_agentd.log
      Server=10.0.0.106 # <====zabbix-server端的IP地址
      ServerActive=10.0.0.106 #<====zabbix-server端的IP地址,主动方式
      Hostname=10.0.0.107 #<====zabbix-agent端的IP地址或者主机名
      Include=/etc/zabbix/zabbix_agentd.d/*.conf
       
      然后在zabbix-server端的web界面进行主机添加
      转 zabbix debug and zabbix使用percona插件监控mysql
zabbix使用percona插件监控mysql
http://www.manongjc.com/article/18964.html
Percona Monitoring Plugins for Zabbix模板 用于Mysql Replication的Slave Running和Slave Stopped监控项的数据不正确
Zabbix 3.2.6-Mysql多实例监控-Percona Monitoring Plugins自动发现
1.多实例
2. zabbix  自动发现脚本文件mysql_low_discovery.sh  
3. 修改ss_get_mysql_stats.php脚本
4. 修改userparameter_percona_mysql.conf 配置文件
5.导入模板
附件:
       
      1)修改主机名称,要跟zabbix-agent的配置文件中的Hostname相对应
      2)选择你想设置的群组,如果群组不存在,可以在下面一栏新的群组中进行添加
      3)指定zabbix-agent端的IP地址或者域名(端口号一般变)
      其他保持默认,点击添加即可
       
      https://github.com/hc-dba/Mysql_Multiport_monitor_used_zabbix 
       
      3、利用Percona Monitoring Plugins插件进行MySQL多实例的监控
      1)percona监控zabbix的脚本是使用php写的,所以需要准备好php运行环境,这里直接用yum安装就可以满足要求了:
      yum install -y php php-mysql
      2)安装percona-zabbix-templates
       
      也可配置Percona yum仓库后安装,建议配置percona的yum源,因为作为一个DBA你肯定会用到percona toolkit套件。 注:我没有用这种方式,percona toolkit我是通过源码包安装的。
      yum install -y https://www.percona.com/redir/downloads/percona-release/redhat/latest/percona-release-0.1-3.noarch.rpm
      yum install -y percona-zabbix-templates
       
      4、yum安装的shell为单实例版,所以我们要进行相关修改,这里已经有小伙伴进行了修改,我们直接克隆,进行对比,需要先安装git
       
      1)对比后,我们发现在get_mysql_stats_wrapper.sh脚本中,添加了相关参数
      PORT=$2
      HOST=127.0.0.1
       
      2)CMD="/usr/bin/php -q $DIR/ss_get_mysql_stats.php --host $HOST --items $ITEM --port $PORT"
      CMD变量的php路径一定要指定正确,否则会报错,我们在后面添加了 --port $PORT
      CACHEFILE改为判断
      if [ $PORT == 3306 ];then
      CACHEFILE="/tmp/$HOST-mysql_cacti_stats.txt"
      else
      CACHEFILE="/tmp/$HOST-mysql_cacti_stats.txt":$PORT
      fi
       
      3)running-slave进行如下修改,此处报警跟模板中的另一个Slave Stopped是重叠的,不过这个比Slave Stopped要灵敏,大概提前3分钟左右报警,不过需要在/etc/my.cnf以及脚本中添加mysql的账号和密码等信息,各有利弊吧
       
      if [ "$ITEM" = "running-slave" ]; then
      # Check for running slave
      RES=`HOME=~zabbix /usr/local/mysql/bin/mysql -P$PORT -h127.0.0.1 -uzabbix -e 'SHOW SLAVE STATUSG' | egrep '(Slave_IO_Running|Slave_SQL_Running):' | grep -i yes|wc -l `
      if [ "$RES" -ne 2 ]; then
      echo 1
      else
      echo 0
      fi
      exit
      并在/etc/my.cnf中添加
      [mysql]
      password=123456 #存在安全隐患,但是如果把权限改小,可能会获取不到值,因为是通过zabbix用户去运行的脚本,里面只是密码,而且账号只能本机登录,所以问题也不大,但是要严格控制其他3个shell脚本的权限。
       
      ##sample

      RES=`HOME=~zabbix /db/mysql/app/mysql/bin/mysql  -uuser-puseroprommo11 -e 'SHOW SLAVE STATUSG' 2>/dev/null | egrep '(Slave_IO_Running|Slave_SQL_Running):' | grep -i yes|wc -l`

      if [ "$RES" -ne 2 ]; then

      echo 1

      else

            RES1=`HOME=~zabbix /db/mysql/app/mysql/bin/mysql  -uuser-puseroprommo11 -e 'SHOW SLAVE STATUSG' 2>/dev/null | egrep '(Slave_IO_Running|Slave_SQL_Running):' | awk -F: '{print $2}' | tr ' ' ','`

           if [ "$RES1" = " Yes, Yes," ]; then

              echo 1

          else

              echo 0

          fi

      fi

      exit

       
      4)#cat $CACHEFILE | sed 's/ / /g; s/-1/0/g'| grep $ITEM | awk -F: '{print $2}'
      这一列改为:
      cat $CACHEFILE | sed 's/ / /g'| grep $ITEM | awk -F: '{print $2}' 或者
      cat $CACHEFILE | sed 's/ / /g; s/-1/1/g'| grep $ITEM | awk -F: '{print $2}'
      改为第一个,在zabbix-server的web端配置报警阈值为小于0,或者等于1的时候报警,
      改为第二行,可以统一设置报警阈值为等于1,因为这个问题,困扰了我好久
       
      5、修改自动发现脚本
      cat mysql_low_discovery.sh
      #!/bin/bash
      #Fucation:mysql low-level discovery
      #Script_name mysql_low_discovery.sh
      discovery() {
      port=($(sudo ss -tpln | awk -F "[ :]+" '/[m]ysql/ {print $4}'))
      printf '{ '
      printf ' "data":[ '
      for key in ${!port[@]}
      do
      if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
      socket=`ps aux|grep ${port[${key}]}|grep -v grep|awk -F '=' '{print $9}'|cut -d ' ' -f 1`
      printf ' { '
      printf " "{#MYSQLPORT}":"${port[${key}]}"}, "
      else [[ "${key}" -eq "((${#port[@]}-1))" ]]
      socket=`ps aux|grep ${port[${key}]}|grep -v grep|awk -F '=' '{print $9}'|cut -d ' ' -f 1`
      printf ' { '
      printf " "{#MYSQLPORT}":"${port[${key}]}"} "
      fi
      done
      printf ' ] '
      printf '} '
      }
      discovery
       
      注意:由于此处使用了 sudo ,所以要把zabbix用户加上sudo权限,且只能执行 ss命令
      echo 'zabbix ALL=(ALL) NOPASSWD:/usr/sbin/ss'>>/etc/sudoers
       
      修改ss_get_mysql_stats.php脚本
      $mysql_user = 'zabbix'; <=====此为php登录mysql的用户
      $mysql_pass = 123456; <=====此为php登录mysql的密码
      $mysql_port = NULL; <=====端口和socket要改为NULL
      $mysql_socket = NULL;
       
      修改userparameter_percona_mysql.conf 配置文件
      把每行中的逗号',' 替换为[*],
      sed -in 's#,#[*],#g' userparameter_percona_mysql.conf
      在每行后面添加 $1
      sed -in 's#$#$1#g' userparameter_percona_mysql.conf
      最后在首行添加端口自动发现脚本
      sed -in '1i UserParameter=MySQL.discovery,/bin/bash /var/lib/zabbix/percona/scripts/mysql_low_discovery.sh' userparameter_percona_mysql.conf
       
      6、复制脚本文件并执行权限
      mkdir -p /var/lib/zabbix/percona/scripts/
      cp userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/
      cp get_mysql_stats_wrapper.sh /var/lib/zabbix/percona/scripts/
      cp mysql_low_discovery.sh /var/lib/zabbix/percona/scripts/
      cp ss_get_mysql_stats.php /var/lib/zabbix/percona/scripts/
      chmod 700 /var/lib/zabbix/percona/scripts/*
      chown -R zabbix. /var/lib/zabbix/
      7、最后一定要在所有的库上面做授权操作,否则拿不到监控数据
      GRANT SELECT, PROCESS, SUPER, REPLICATION CLIENT ON *.* TO 'zabbix'@'localhost' identified by '123456';
      flush privileges;
       
      8、最后把模板Mysql_Multiport.xml导入到zabbix-server内,所有用到的脚本文件都已经添加到附件中,大家可以下载使用。
      创建触发器原型
       
      在zabbix-server端,添加触发器
      依次点击 主机===>自动发现===>触发器类型===>点击右上角的创建触发器原型
      分配报警级别,点击表达式栏的添加,选择选择原型
      然后选择 例如:MySQL.slave-stopped[{#MYSQLPORT}]
      选择最新的T值小于N
      N为0
      注:如果在第4.4中指定的是cat $CACHEFILE | sed 's/ / /g; s/-1/1/g'| grep $ITEM | awk -F: '{print $2}'
      选择最新的T值等于N
      N为1
       
      然后我们可以手动停止主从复制,稍等片刻,就会发了报警信息
       
      博客园不允许放附件,所以我只能把附件放在百度云了
      http://pan.baidu.com/s/1slFGVoT
       
      参考文章:
      https://github.com/hc-dba/Mysql_Multiport_monitor_used_zabbix
       
      另外可以添加微信和邮件告警,这里推荐下面的博文
       
       
       
      ############sample  监控单节点多实例的mysql
       

      1.多实例

      1台server 多个实例(即这些实例都绑定到同一个机器ip和不同端口)的问题,主要体现在采集端 需要适配多个server 进程

      多个实例的监控用户和密码必须保持一致

      在这个例子里

      Ip 为10.241.94.15

      Port 为 3306 和 3307

      (以下修改是基于单实例监控的脚本进行更改的)

      1.1.-> zabbix 脚本文件 get_mysql_stats_wrapper.sh 

      12 行加入

      PORT=$2

       

      13 host 修改localhost为IP

      HOST=”10.241.94.15”

      15 行更改为 加入 --port $PORT

      CMD="/usr/bin/php -q $DIR/ss_get_mysql_stats.php --host $HOST --items gg --port $PORT"

      16修改为:

      将 CACHEFILE="/tmp/$HOST-mysql_cacti_stats.txt”

      修改为

      if [ $PORT == 3306 ];then

               CACHEFILE="/tmp/$HOST-mysql_cacti_stats.txt"

      else

             CACHEFILE="/tmp/$HOST-mysql_cacti_stats.txt":$PORT

      fi

      如下2修改为 加入-P$PORT

      RES=`HOME=~zabbix /db/mysql/app/mysql/bin/mysql  -uuseropr -puseroprommo11 -P$PORT -e 'SHOW SLAVE STATUSG' 2>/dev/null | egrep '(Slave_IO_Running|Slave_SQL_Running):' | grep -i yes|wc -l`

       RES1=`HOME=~zabbix /db/mysql/app/mysql/bin/mysql  -uuseropr -puseroprommo11 -P$PORT -e 'SHOW SLAVE STATUSG' 2>/dev/null | egrep '(Slave_IO_Running|Slave_SQL_Running):' | awk -F: '{print $2}' | tr ' ' ','`

      1.2 用户授权

      (如下4个授权grant 命令都需要执行,一台服务器多个实例 监控 需要允许 监控账号远程登陆)

      > GRANT PROCESS,SUPER,REPLICATION CLIENT ON *.* TO zabbix@'localhost' IDENTIFIED BY '123456';

      > grant all privileges on *.* to zabbix@localhost;

      > grant all privileges  on *.* to zabbix@'%' identified by "123456";

      > grant PROCESS,SUPER,REPLICATION CLIENT  on *.* to zabbix@'%' identified by "123456";

      > flush privileges;

      --查询权限:

      > select user,host from mysql.user;

      >SELECT Repl_slave_priv,Repl_client_priv,super_priv,host FROM mysql.USER WHERE USER='zabbix ';

      > quit;

      测试5.1

       

      (使用如下带IP,端口,用户名,密码的登陆方式必须成功 )

       mysql -uroot –p123456 -h10.241.94.15 –P3307

      mysql -uroot -p123456 -h10.241.94.15 -P3306

      测试5.2

      (3306 和3307 分别对应着一台主机多个mysql 对外提供服务的 端口号,具体以实际为主,如下命令应该有数字返就是正常),

      sh get_mysql_stats_wrapper.sh  gg  3306

      sh get_mysql_stats_wrapper.sh  gg  3307

      如果返回值为空的话,使用-x 进行调试:

      sh –x get_mysql_stats_wrapper.sh  gg  3306

      2. zabbix  自动发现脚本文件mysql_low_discovery.sh  

      2.1  cp mysql_low_discovery.sh   /var/lib/zabbix/percona/scripts/

      chmod 755  /var/lib/zabbix/percona/scripts/*

       

      2.2

      (Use root) 注意:由于此处使用了 sudo ,所以要把zabbix用户加上sudo权限,且只能执行 ss命令

      echo 'zabbix ALL=(ALL) NOPASSWD:/usr/sbin/ss'>>/etc/sudoers

      echo 'zabbix ALL=(ALL) NOPASSWD:/bin/netstat'>>/etc/sudoers

      3. 修改ss_get_mysql_stats.php脚本

      <=====端口和socket要改为NULL

      $mysql_port = NULL;

      $mysql_socket = NULL;

      测试5.3

      以下2条命令应该返回 数值

      php -q /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php  --host 10.241.94.15 --items gg --port 3306

      php -q /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php  --host 10.241.94.15 --items gg --port 3307

      4. 修改userparameter_percona_mysql.conf 配置文件

       

      4.1 把每行中的逗号',' 替换为[*],

      sed -in 's#,#[*],#g' userparameter_percona_mysql.conf

       

      4.2 在每行后面添加 $1

      sed -in 's#$# $1#g' userparameter_percona_mysql.conf

      4.3 最后在 首行添加端口自动发现脚本 (以下为一行)

      sed -in '1i UserParameter=MySQL.discovery,/bin/bash /var/lib/zabbix/percona/scripts/mysql_low_discovery.sh' userparameter_percona_mysql.conf

       

      验证结果如下:

      cat userparameter_percona_mysql.conf

      测试6zabbix 用户下执行mysql_low_discovery.sh 

       

      返回结果应该如下端口号,那就是正常:

       

       

       

      测试7

      (该测试是在zabbix  server上做,等待5分钟,进行测试,返回结果应该出现 端口号 就是正确)

      cd /usr/local/zabbix/bin/

      ->Server:

      ./zabbix_get -s 10.241.94.15 -k MySQL.discovery

      Issue

      有的时候,在 网页端 主机监控 ,自动发现里 的 percona 多实例模板 会报错 监控出现 unsupported key 报错

       

       

      解决方法:

      1.确认4.3 已经做,并且测试7 通过

       

      2.然后重启zabbix  agent

      pkill zabbix

      /usr/local/zabbix/sbin/*

      3.一般10分钟,zabbix 才会重新检测 unsupported key 的定义

      (实际情况,过了将近20分钟,unsupported key的报错才会取消)

      ->  Administration/General/通过右上角下拉框选择不同的项目完成相关配置和管理。

      ->  如下图2-36所示。

      5.导入模板

      5.1 Zabbix 管理网页 模板 导入功能  (Mysql_Multiport.xml)

      确认是否导入成功

      1.显示已成功导入

      2. 自动发现规则如下

         注意: 所有的监控项目 都在自动发现规则 下

      5.2 将主机 链接到这个新模板

      Mysql_Multiport

      注意:如果原有的主机已经添加了mysql 单机监控模板,

      需要在网页端 删除掉原来的主机。 在重新添加 新加的监控模板(template/percona multiport template) 即可

      附件:

      mysql_low_discovery.sh  

      Mysql_Multiport

      ####sample 

      监控单节点单实例

      -〉1配置agent 配置

      rpm -ivh percona-zabbix-templates-1.1.8-1.noarch.rpm

      Scripts are installed to /var/lib/zabbix/percona/scripts

      Templates are installed to /var/lib/zabbix/percona/templates

      yum install percona-zabbix-templates php php-mysql -y

      Installed:

        php.x86_64 0:5.3.3-47.el6                 php-mysql.x86_64 0:5.3.3-47.el6               

      Dependency Installed:

        php-cli.x86_64 0:5.3.3-47.el6               php-common.x86_64 0:5.3.3-47.el6             

        php-pdo.x86_64 0:5.3.3-47.el6             

      Complete!

      [root@devops-mysql-node1 ~]# rpm -ql percona-zabbix-templates

      /var/lib/zabbix/percona

      /var/lib/zabbix/percona/scripts

      /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh

      /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php

      /var/lib/zabbix/percona/templates

      /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf

      /var/lib/zabbix/percona/templates/zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.8.xml   为MYSQL监控模板

      -zabbix配置文件

      将配置文件拷贝到/etc/zabbix/zabbix_agentd.d/目录

      cp  /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf

      /usr/local/zabbix/etc/zabbix_agentd.conf.d/

      More /usr/local/zabbix/etc/zabbix_agentd.conf.d/userparameter_percona_mysql.conf

      (这里是支持扩展的脚本位置)

      Useparameter=Mysql.rows-updated,****/get_mysql_stats_wrapper.sh ix

      **

      (Ensure zabbix_agentd.conf contains the line: Include=/etc/zabbix_agentd.conf.d/ )

      ->2。建立本地用户

      (如下2个授权grant 命令都需要执行)

      > GRANT PROCESS,SUPER,REPLICATION CLIENT ON *.* TO zabbix@'localhost' IDENTIFIED BY '123456';

      > grant all privileges on *.* to zabbix@localhost;

      > flush privileges;

      > select user,host from mysql.user;

      > quit;

      -〉3。zabbix 脚本文件 ss_get_mysql_stats.php

      (重要,测试mysql 联通性 ,配置项目 使用用户/密码/本地socket连接)

      1).vim /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php

      $mysql_user = 'root';

      $mysql_pass = '123456';

      $mysql_port = 3306;

      $mysql_socket = '/db/mysql/data/mysqltmp/mysql.sock';

      $mysql_flags = 0;

      测试环境root密码为空,如果生产环境会创建专门只读账号。

      2).同时注意:/var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php

      以下参数定义缓存文件的具体位置

      (如果port变量定义一个非默认的3306 端口,就会往/tmp 写入一个文件 t-mysql_cacti_stats.txt:$port)

      $cache_file = "$cache_dir/$sanitized_host-mysql_cacti_stats.txt" . ($port != 3306 ? ":$port" : '');

       

      注意:

      测试1:(zabzabbix 用户下)

       

      如果 密码  配置错误,

      /usr/bin/php -q /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php --host localhost --items gg

      会出现如下报错 :

      root@centos6 ~]# /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg

      ERROR: run the command manually to investigate the problem: /usr/bin/php -q /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php --host localhost --items gg

      [root@centos6 ~]# /usr/bin/php -q /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php --host localhost --items gg

      ERROR: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)[root@centos6 ~]#

      如果连接失败,可以使用如下PHP 测试下

      #######

      <?php

      $i = 10000;

      $host= 'localhost';

      $user = 'dbmonopr';

      $pass = 'dbmonoprommo11';

      $port = 3307;

      $socket = '/db/mysql/data/mysqltmp/mysql.sock';

      $flags = 0;

      while($i>=0) {

      $conn = mysqli_init();

      $link =mysqli_real_connect($conn, $host, $user, $pass, NULL, $port, $socket, $flags) or die(mysqli_connect_error());

      $info = mysqli_get_host_info($conn);

      $i--;

      mysqli_close($conn);

      unset($conn);

      }

      ?>

      ###

      4.-> zabbix 脚本文件 get_mysql_stats_wrapper.sh  

      (如果mysql 端口 不是3306,而是3503。这个也需要修改)

      修改1第15行,如果是默认端口,不需要修改这一项,如果不是默认端口

      change

      CACHEFILE="/tmp/$HOST-mysql_cacti_stats.txt"

      to

      CACHEFILE="/tmp/$HOST-mysql_cacti_stats.txt:3503"

      修改2: 第19行 到25行,变量里加入“mysql 的绝对路径”和“用户和密码” 和 “2〉/dev/null”

      change

      19 行 到 25行修改如下:

      to

      RES=`HOME=~zabbix /db/mysql/app/mysql/bin/mysql  -uuser-pdbmonoprommo11 -e 'SHOW SLAVE STATUSG' 2>/dev/null | egrep '(Slave_IO_Running|Slave_SQL_Running):' | grep -i yes|wc -l`

      if [ "$RES" -ne 2 ]; then

      echo 1

      else

            RES1=`HOME=~zabbix /db/mysql/app/mysql/bin/mysql  -uuser-pdbmonoprommo11 -e 'SHOW SLAVE STATUSG' 2>/dev/null | egrep '(Slave_IO_Running|Slave_SQL_Running):' | awk -F: '{print $2}' | tr ' ' ','`

           if [ "$RES1" = " Yes, Yes," ]; then

              echo 1

          else

              echo 0

          fi

      fi

      exit

      测试2:(root 用户下)

      sudo -u  zabbix -H /usr/local/zabbix/bin/get_mysql_stats_wrapper.sh running-slave

      0

      (正常情况下,应该返回0或者1,而不是“Access denied” 报错 )

      /usr/local/zabbix/bin/get_mysql_stats_wrapper.sh running-slave

      0

      (正常情况下,应该返回0或者1,而不是“Access denied” 报错 )

      需要改配置文件需要重启

      /etc/init.d/zabbix-agent restart

      或者

      pkill zabbix

      /usr/local/zabbix/sbin/*

      测试3:(zabzabbix 用户下)

      进行测试会返回测试结果

      cd /var/lib/zabbix/percona/scripts/

      ./get_mysql_stats_wrapper.sh gm

      0

      ./get_mysql_stats_wrapper.sh gw

      20060

      3.打开 Debug (zabbix 用户下修改ss_get_mysql_stats.php,确保/tmp/1.log  zabbix 用户有写的权限)

      ss_get_mysql_stats.php

      $debug     = true;

      $debug_log = '/tmp/1.log';

      关闭debug 

       $debug     = FALSE; # Define whether you want debugging behavior.

      $debug_log = FALSE; # If $debug_log is a filename, it'll be used.

      ss_get_mysql_stats.php 解读:

      -〉首先判断语法 是否正确

      ss_get_mysql_stats.php --host localhost --items gg

      -〉 其次 语法正确,就会在输出 runquery    SHOW /*!50000 ENGINE*/ INNODB STATUS,

      'SHOW /*!50002 GLOBAL */ STATUS'

      ->  其次判断 如果cache_file 超过300秒,就会删除,重写一遍,如果不超过300秒,就不重写一遍。

      ->最后 如果有写的权限,就会写入一个临时文件 类似 localhost-mysql_cacti_stats.txt.port


1、添加percona仓库。

# yum install -y https://mirrors.tuna.tsinghua.edu.cn/percona/yum/percona-release-latest.noarch.rpm

2、安装插件。

# yum -y install percona-zabbix-templates
# rpm -ql percona-zabbix-templates
/var/lib/zabbix/percona
/var/lib/zabbix/percona/scripts
/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh
/var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php
/var/lib/zabbix/percona/templates
/var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf
/var/lib/zabbix/percona/templates/zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.8.xml

3、这个项目是php写的,需要安装php和php-mysql。(这个在官网有说明)

# yum install -y php php-mysql

4、拷贝配置文件到配置目录,并重启zabbix-agent。

# cp -a /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/
# rm -f /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
# service zabbix-agent restart

5、授权监控用户,使其能获取数据。

# mysql -uroot -p
> grant all privileges on *.* to zabbix@localhost identified by 'PASS';
> flush privileges;
> quit;

6、修改程序里面的用户密码,使其能连接到mysql。

# vim /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php
$mysql_user = 'zabbix';
$mysql_pass = 'PASS';

7、修改监控脚本。脚本里面是直接执行mysql命令获取数据的,但是没有指定用户名和密码,导致连不上数据库。为mysql命令加上用户名密码参数即可。

# vim /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh
RES=`HOME=~zabbix mysql -uzabbix -pPASS -e 'SHOW SLAVE STATUSG' 2> /dev/null | egrep '(Slave_IO_Running|Slave_SQL_Running):' | awk -F: '{print $2}' | tr '
' ','`

或者更简单一点,直接添加一个mysql的客户端验证配置。

# vim ~zabbix/.my.cnf
[client]
user = zabbix
password = PASS

8、测试脚本是否能获取到数据。

# /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg
16
# /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh jg
0
# sudo -u zabbix -H /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh running-slave
1
# sudo -u zabbix zabbix_get -s 10.0.1.61 -k 'proc.num[mysqld]'
1
# sudo -u zabbix zabbix_get -s 10.0.1.61 -k 'mysql.ping'
1

9、导入模板。在这里踩到坑,安装包提供的插件版本是1.1.8,导入过程中报错。经过一番查询,可以使用1.1.6。

可以从这里下载1.1.6版本的文件:https://www.percona.com/downloads/percona-monitoring-plugins/

按理说,导入模板之后,链接到主机就可以查看到数据了。不过,等了很久一直没数据,又是经过一番查询...

插件创建了一个状态文件,然后从中读取数据,但是这个文件第一次启动的时候所属用户是root,而zabbix的启动用户是zabbix,没有权限读取这个文件,所以页面上一直没有数据。

解决办法很简单,删除这个文件即可,程序会自动创建一个权限正确的新文件。

# rm -f /tmp/localhost-mysql_cacti_stats.txt

10、到这里就可以看到数据了。

转 zabbix debug and zabbix使用percona插件监控mysql
zabbix使用percona插件监控mysql
http://www.manongjc.com/article/18964.html
Percona Monitoring Plugins for Zabbix模板 用于Mysql Replication的Slave Running和Slave Stopped监控项的数据不正确
Zabbix 3.2.6-Mysql多实例监控-Percona Monitoring Plugins自动发现
1.多实例
2. zabbix  自动发现脚本文件mysql_low_discovery.sh  
3. 修改ss_get_mysql_stats.php脚本
4. 修改userparameter_percona_mysql.conf 配置文件
5.导入模板
附件:


补充:

如果把默认端口3306改成了别的端口,也会造成报错读取不到数据。

在/var/lib/zabbix/percona/scripts目录下有两个脚本,经过仔细查看,发现get_mysql_stats_wrapper.sh在指定读取的状态文件时路径是写的是CACHEFILE="/tmp/$HOST-mysql_cacti_stats.txt",而在/tmp/目录下是一个带端口的文件localhost-mysql_cacti_stats.txt:3310,这样肯定就读不到了。然后去找文件是在哪里生成的,查看另一个php脚本,果然做了判断处理,端口不是3306的话就在文件名后面加上端口号。

问题找到了,将源码中的判断部分去掉就好了。

# vim /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php
$cache_file = "$cache_dir/$sanitized_host-mysql_cacti_stats.txt" . ($port != 3306 ? ":$port" : '');
改成:
$cache_file = "$cache_dir/$sanitized_host-mysql_cacti_stats.txt";

参考:
https://www.percona.com/doc/percona-monitoring-plugins/LATEST/zabbix/index.html
https://blog.csdn.net/liang_operations/article/details/81868668

mysql多实例监控实录
 
系统环境:
cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
内核版本:
uname -r
3.10.0-514.el7.x86_64
docker版本:
docker -v
Docker version 1.12.6, build 3a094bd/1.12.6
docker 相关镜像版本:
docker.io/zabbix/zabbix-web-nginx-mysql latest
docker.io/zabbix/zabbix-server-mysql latest
docker.io/mysql 5.7
被监控mysql应用版本:
mysql-5.7.17-linux-glibc2.5-x86_64
Percona Monitoring Plugins版本:
 
写在最前:如果zabbix server和zabbix agent已经通过其他方式安装,可以直接跳过1、2步,直接从第3步开始看。
 
1、zabbix服务端我们运行在docker容器内
所以服务器端先安装docker服务
yum install -y epel-release
yum install -y docker #centos6.x版本的命令是yum install -y docker-io
 
然后运行docker服务
systemctl start docker
docker加入开机自启动
systemctl enable docker
查看docker是否成功启动
systemctl status docker
注:使用docker需要使用加速器,否则那龟速,自己体会吧。加速器daocloud和阿里云都可以,我使用的前者。
 
2.安装相关容器
2.1. mysql 容器
docker run --name mysql-server -t
      -e MYSQL_DATABASE="zabbix"
      -e MYSQL_USER="zabbix"
      -e MYSQL_PASSWORD="ywwd.net"
      -e MYSQL_ROOT_PASSWORD="ywwd.net"
      -v /data/container/mysql/zabbix:/var/lib/mysql
      -v /etc/localtime:/etc/localtime:ro
      --restart=always
      -d mysql:5.7
      --character-set-server=utf8 --collation-server=utf8_general_ci --sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
 
2.2. zabbix-server 容器
docker run --name zabbix-server-mysql -t
      -e DB_SERVER_HOST="mysql-server"
      -e MYSQL_DATABASE="zabbix"
      -e MYSQL_USER="zabbix"
      -e MYSQL_PASSWORD="ywwd.net"
      -e MYSQL_ROOT_PASSWORD="ywwd.net"
      --link mysql-server:mysql
      -p 10051:10051 --restart=always
      -v /etc/localtime:/etc/localtime:ro
      -d zabbix/zabbix-server-mysql:latest
 
2.3. zabbix-web 容器(nginx)
docker run --name zabbix-web-nginx-mysql -t
      -e DB_SERVER_HOST="mysql-server"
      -e MYSQL_DATABASE="zabbix"
      -e MYSQL_USER="zabbix"
      -e MYSQL_PASSWORD="ywwd.net"
      -e MYSQL_ROOT_PASSWORD="ywwd.net"
      --link mysql-server:mysql
      --link zabbix-server-mysql:zabbix-server
      -v /etc/localtime:/etc/localtime:ro
      -p 80:80
      --restart=always
      -d zabbix/zabbix-web-nginx-mysql:latest
 
注意:这里有个小问题,zabbix-web-nginx-mysql的启动脚本/run_zabbix_component.sh中,指定了时区,不是中国的Asia/Shanghai,所以我们要进入zabbix-web-nginx-mysql进行修改
2.4. 修改zabbix-web的时区
docker exec -it zabbix-web-nginx-mysql /bin/bash
TZ=${TZ:-"Asia/Shanghai"} 这里改为Asia/Shanghai,否则zabbix-web端的时间会慢5个小时
sed -in 's#Europe/Riga#Asia/Shanghai#g' /run_zabbix_component.sh
修改时区后,需要重启容器
docker restart zabbix-web-nginx-mysql
2.5. 在firewall防火墙放开zabbix-server和zabbix-agent的服务端口号
firewall-cmd --permanent --add-port=10050-10051/tcp
#--permanent永久生效,10050zabbix-agent服务端口,10051zabbix-server服务端口
firewall-cmd --reload
#更改后需要重新加载firewall防火墙
firewall-cmd --list-all
#最后查看配置是否生效
 
这样zabbix-server端就已经安装完毕
接下来客户端我们采用rpm包进行安装
rpm -ivh zabbix-agent-3.2.6-1.el7.x86_64.rpm
同样需要放开zabbix-agent端口
firewall-cmd --permanent --add-port=10050/tcp
firewall-cmd --reload
 
然后对zabbix-agent端进行配置
egrep -v '^$|^#' /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
Server=10.0.0.106 # <====zabbix-server端的IP地址
ServerActive=10.0.0.106 #<====zabbix-server端的IP地址,主动方式
Hostname=10.0.0.107 #<====zabbix-agent端的IP地址或者主机名
Include=/etc/zabbix/zabbix_agentd.d/*.conf
 
然后在zabbix-server端的web界面进行主机添加
转 zabbix debug and zabbix使用percona插件监控mysql
zabbix使用percona插件监控mysql
http://www.manongjc.com/article/18964.html
Percona Monitoring Plugins for Zabbix模板 用于Mysql Replication的Slave Running和Slave Stopped监控项的数据不正确
Zabbix 3.2.6-Mysql多实例监控-Percona Monitoring Plugins自动发现
1.多实例
2. zabbix  自动发现脚本文件mysql_low_discovery.sh  
3. 修改ss_get_mysql_stats.php脚本
4. 修改userparameter_percona_mysql.conf 配置文件
5.导入模板
附件:
 
1)修改主机名称,要跟zabbix-agent的配置文件中的Hostname相对应
2)选择你想设置的群组,如果群组不存在,可以在下面一栏新的群组中进行添加
3)指定zabbix-agent端的IP地址或者域名(端口号一般变)
其他保持默认,点击添加即可
 
https://github.com/hc-dba/Mysql_Multiport_monitor_used_zabbix 
 
3、利用Percona Monitoring Plugins插件进行MySQL多实例的监控
1)percona监控zabbix的脚本是使用php写的,所以需要准备好php运行环境,这里直接用yum安装就可以满足要求了:
yum install -y php php-mysql
2)安装percona-zabbix-templates
 
也可配置Percona yum仓库后安装,建议配置percona的yum源,因为作为一个DBA你肯定会用到percona toolkit套件。 注:我没有用这种方式,percona toolkit我是通过源码包安装的。
yum install -y https://www.percona.com/redir/downloads/percona-release/redhat/latest/percona-release-0.1-3.noarch.rpm
yum install -y percona-zabbix-templates
 
4、yum安装的shell为单实例版,所以我们要进行相关修改,这里已经有小伙伴进行了修改,我们直接克隆,进行对比,需要先安装git
 
1)对比后,我们发现在get_mysql_stats_wrapper.sh脚本中,添加了相关参数
PORT=$2
HOST=127.0.0.1
 
2)CMD="/usr/bin/php -q $DIR/ss_get_mysql_stats.php --host $HOST --items $ITEM --port $PORT"
CMD变量的php路径一定要指定正确,否则会报错,我们在后面添加了 --port $PORT
CACHEFILE改为判断
if [ $PORT == 3306 ];then
CACHEFILE="/tmp/$HOST-mysql_cacti_stats.txt"
else
CACHEFILE="/tmp/$HOST-mysql_cacti_stats.txt":$PORT
fi
 
3)running-slave进行如下修改,此处报警跟模板中的另一个Slave Stopped是重叠的,不过这个比Slave Stopped要灵敏,大概提前3分钟左右报警,不过需要在/etc/my.cnf以及脚本中添加mysql的账号和密码等信息,各有利弊吧
 
if [ "$ITEM" = "running-slave" ]; then
# Check for running slave
RES=`HOME=~zabbix /usr/local/mysql/bin/mysql -P$PORT -h127.0.0.1 -uzabbix -e 'SHOW SLAVE STATUSG' | egrep '(Slave_IO_Running|Slave_SQL_Running):' | grep -i yes|wc -l `
if [ "$RES" -ne 2 ]; then
echo 1
else
echo 0
fi
exit
并在/etc/my.cnf中添加
[mysql]
password=123456 #存在安全隐患,但是如果把权限改小,可能会获取不到值,因为是通过zabbix用户去运行的脚本,里面只是密码,而且账号只能本机登录,所以问题也不大,但是要严格控制其他3个shell脚本的权限。
 
##sample

RES=`HOME=~zabbix /db/mysql/app/mysql/bin/mysql  -uuser-puseroprommo11 -e 'SHOW SLAVE STATUSG' 2>/dev/null | egrep '(Slave_IO_Running|Slave_SQL_Running):' | grep -i yes|wc -l`

if [ "$RES" -ne 2 ]; then

echo 1

else

      RES1=`HOME=~zabbix /db/mysql/app/mysql/bin/mysql  -uuser-puseroprommo11 -e 'SHOW SLAVE STATUSG' 2>/dev/null | egrep '(Slave_IO_Running|Slave_SQL_Running):' | awk -F: '{print $2}' | tr ' ' ','`

     if [ "$RES1" = " Yes, Yes," ]; then

        echo 1

    else

        echo 0

    fi

fi

exit

 
4)#cat $CACHEFILE | sed 's/ / /g; s/-1/0/g'| grep $ITEM | awk -F: '{print $2}'
这一列改为:
cat $CACHEFILE | sed 's/ / /g'| grep $ITEM | awk -F: '{print $2}' 或者
cat $CACHEFILE | sed 's/ / /g; s/-1/1/g'| grep $ITEM | awk -F: '{print $2}'
改为第一个,在zabbix-server的web端配置报警阈值为小于0,或者等于1的时候报警,
改为第二行,可以统一设置报警阈值为等于1,因为这个问题,困扰了我好久
 
5、修改自动发现脚本
cat mysql_low_discovery.sh
#!/bin/bash
#Fucation:mysql low-level discovery
#Script_name mysql_low_discovery.sh
discovery() {
port=($(sudo ss -tpln | awk -F "[ :]+" '/[m]ysql/ {print $4}'))
printf '{ '
printf ' "data":[ '
for key in ${!port[@]}
do
if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
socket=`ps aux|grep ${port[${key}]}|grep -v grep|awk -F '=' '{print $9}'|cut -d ' ' -f 1`
printf ' { '
printf " "{#MYSQLPORT}":"${port[${key}]}"}, "
else [[ "${key}" -eq "((${#port[@]}-1))" ]]
socket=`ps aux|grep ${port[${key}]}|grep -v grep|awk -F '=' '{print $9}'|cut -d ' ' -f 1`
printf ' { '
printf " "{#MYSQLPORT}":"${port[${key}]}"} "
fi
done
printf ' ] '
printf '} '
}
discovery
 
注意:由于此处使用了 sudo ,所以要把zabbix用户加上sudo权限,且只能执行 ss命令
echo 'zabbix ALL=(ALL) NOPASSWD:/usr/sbin/ss'>>/etc/sudoers
 
修改ss_get_mysql_stats.php脚本
$mysql_user = 'zabbix'; <=====此为php登录mysql的用户
$mysql_pass = 123456; <=====此为php登录mysql的密码
$mysql_port = NULL; <=====端口和socket要改为NULL
$mysql_socket = NULL;
 
修改userparameter_percona_mysql.conf 配置文件
把每行中的逗号',' 替换为[*],
sed -in 's#,#[*],#g' userparameter_percona_mysql.conf
在每行后面添加 $1
sed -in 's#$#$1#g' userparameter_percona_mysql.conf
最后在首行添加端口自动发现脚本
sed -in '1i UserParameter=MySQL.discovery,/bin/bash /var/lib/zabbix/percona/scripts/mysql_low_discovery.sh' userparameter_percona_mysql.conf
 
6、复制脚本文件并执行权限
mkdir -p /var/lib/zabbix/percona/scripts/
cp userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/
cp get_mysql_stats_wrapper.sh /var/lib/zabbix/percona/scripts/
cp mysql_low_discovery.sh /var/lib/zabbix/percona/scripts/
cp ss_get_mysql_stats.php /var/lib/zabbix/percona/scripts/
chmod 700 /var/lib/zabbix/percona/scripts/*
chown -R zabbix. /var/lib/zabbix/
7、最后一定要在所有的库上面做授权操作,否则拿不到监控数据
GRANT SELECT, PROCESS, SUPER, REPLICATION CLIENT ON *.* TO 'zabbix'@'localhost' identified by '123456';
flush privileges;
 
8、最后把模板Mysql_Multiport.xml导入到zabbix-server内,所有用到的脚本文件都已经添加到附件中,大家可以下载使用。
创建触发器原型
 
在zabbix-server端,添加触发器
依次点击 主机===>自动发现===>触发器类型===>点击右上角的创建触发器原型
分配报警级别,点击表达式栏的添加,选择选择原型
然后选择 例如:MySQL.slave-stopped[{#MYSQLPORT}]
选择最新的T值小于N
N为0
注:如果在第4.4中指定的是cat $CACHEFILE | sed 's/ / /g; s/-1/1/g'| grep $ITEM | awk -F: '{print $2}'
选择最新的T值等于N
N为1
 
然后我们可以手动停止主从复制,稍等片刻,就会发了报警信息
 
博客园不允许放附件,所以我只能把附件放在百度云了
http://pan.baidu.com/s/1slFGVoT
 
参考文章:
https://github.com/hc-dba/Mysql_Multiport_monitor_used_zabbix
 
另外可以添加微信和邮件告警,这里推荐下面的博文