11月22日 Zabbix监控系统 2

1、自定义key

接口:server端之所以能够监控agent端,是因为agent端有一个的接口,这个接口用于和server端连接,传送监控的数据,所以一个主机要想被Zabbix监控,首先要在本机安装相应的接口,接口类型有agent,snmp, jmx等,agent是绝大多数linux主机上都可以安装的接口,snmp一般是安装在路由器和交换机等网络设备上使用的接口,jmx是java虚拟机安装使用的接口,Zabbix监控时可以与这三种接口进行连接,进而监控不同的设备或主机。
自定义key:在zabbix agent端的配置文件上由用户通过UserParameter指令定义的key,要监控某一个主机的item,需要通过key在这个主机上获取这个监控项。
vim zabbix_agentd.conf文件中
UserParameter=<key>,<shell,command>,key是自定义的key,可以随便定义,可以加参数;逗号后面是得到要监控的数据的命令或脚本。
示例:用自定义key监控php-fpm的各状态信息

1、在被监控的主机上安装如下软件包
yum install nginx php-fpm zabbix-agent zabbix-sender -y
2、配置zabbix-agent并启动服务
vim /etc/zabbix/zabbix_agentd.conf 
LogFileSize=1   ---滚动日志
EnableRemoteCommands=1  #允许sever端控制本机在本地远程执行命令
LogRemoteCommands=1 #远程执行命令时记录日志
Server=172.18.21.107 #被动模式下允许哪个server端过来采集监控数据
ListenPort=10050 #被动模式下agent端监听的端口
ListenIP=0.0.0.0 #被动模式下监听的地址
StartAgents=5 #使用agent接口连接时打开的进程数
ServerActive=172.18.21.107 #主动模式下将监控的数据主动发送给哪个远程的server
Hostname=node4.magedu.com  ---主动模式下要告诉server端主机的主机名,这样server端才知道这是谁的数据,进行存储下来
systemctl start zabbix-agent.service 
3、配置php-fpm和nginx并启动服务
vim /etc/php-fpm.d/www.conf 
listen = 127.0.0.1:9000
;listen.allowed_clients = 127.0.0.1  #将此行注释掉,默认为允许任务主机连接
user = nginx
group = nginx
pm.status_path = /php-status #指明状态页的uri
ping.path = /ping
ping.response = pong
systemctl start php-fpm
vim /etc/nginx/conf.d/web.conf 
server {
        listen 80 default_server ;
        server_name wwww.a.com;
        root /app/website;
        location  ~* \.php$ {
                  fastcgi_pass 127.0.0.1:9000;
                 fastcgi_index index.php;
                 fastcgi_param SCRIPT_FILENAME /app/website$fastcgi_script_name;
                 include fastcgi_params;
               }   
         location ~* ^/(php-status|ping)$ {
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
                include fastcgi_params;
        #       allow 127.0.0.1;     #为了安全最好设置为只允许本机访问状态页面,这里为了测试方便,将此项和下面的一项注释掉了
#               deny all;
                access_log off; #并且关闭访问日志,不然每监控一个状态信息都会发送日志
                 }   
}
mkdir /app/website -pv
vim  /app/website/index.php
<?php
phpinfo();
?>
nginx -t
nginx #启动服务
测试 http://172.18.21.200/index.php看是否连接php成功
http://172.18.21.200/php-status    ---看能否看到php-fpm的状态信息
[root@node4 website]#curl -s 172.18.21.200/php-status
pool:                 www
process manager:      dynamic
start time:           22/Nov/2017:20:34:36 +0800
start since:          2117
accepted conn:        9
listen queue:         0
max listen queue:     0
listen queue len:     128
idle processes:       4
active processes:     1
total processes:      5
max active processes: 2
max children reached: 0
slow requests:        0
比如要监控active processes,可以通过这个命令获
curl -s http://127.0.0.1/php-status|awk '/^active/{print $NF}'
要监控total processes,可以通过如下命令获得
curl -s http://127.0.0.1/php-status|awk '/^total/{print $NF}'
也可以把要监控的项做为参数传递给这个命令或者脚本,比如你要监控上面两
项,可以把active和total做为参数传递给这个命令,就应该写成如下格式
curl -s http://127.0.0.1/php-status|awk '/^$1/{print $$NF}',$1表示传给此命令
的第一个参数(active或total),$$NF这里用两个$是为了说明为awk的内建
变量而不是参数,比如你要打印第一列,要写成$$1。
4、自定义key
cd /etc/zabbix/zabbix_agentd.d/
vim php-fpm.conf
也可以加到主配置文件中vim /etc/zabbix/zabbix_agentd.conf 
QQ截图20171122212719.png
注意UserParameter的大小写,不然服务重启不成功
systemctl restart zabbix-agent
[root@node1 conf.d]#zabbix_get -s 172.18.21.200 -p 10050 -k "fpm.status[total]"     ---在server端通过自定义的key手动获取一个监控数据,发现获取成功
[root@node1 conf.d]#zabbix_get -s 172.18.21.200 -p 10050 -k "fpm.status[active]"
1
[root@node1 conf.d]#zabbix_get -s 172.18.21.200 -p 10050 -k "fpm.status[max active]"
2
[root@node1 conf.d]#zabbix_get -s 172.18.21.200 -p 10050 -k "fpm.status[idle]"
4
5、访问zabbix监控的管理页面http://172.18.21.107/zabbix/ 
创建此主机,然后创建一个模板,在模板的item中添加上面的四项要监控的内容,使用自定义key,然后再将此模板链接到刚才创建的主机上。

创建主机


image.png

创建模板


image.png

在模板中加入要监控的项目
image.png

image.png

将此模板链接到要监控的主机


image.png

2、网络发现

  • 网络发现:zabbix server扫描指定网络范围内的主机;
  • 发现方式:ip地址范围;可用服务(ftp, ssh, http, ...)
    zabbix_agent的响应;
    snmp_agent的响应;
  • 分两个阶段:
    discovery
    actions:把discvery events当作前提条件,发现后执行的动作
  • 可采取的动作:
    send message, remote command
    add/remove host
    enable/disable host
    add host to group
    link template to host
    示例
    在要监控的主机上安装好zabbix-agent和zabbix-sender并启动zabbix-agent服务,这样zabbix-server才能扫描到此主机,进而将其加到监控里,使用如下key进行扫描主机
[root@node1 conf.d]#zabbix_get -s 172.18.21.200 -p 10050 -k "system.uname"
Linux node4.magedu.com 3.10.0-693.el7.x86_64 #1 SMP Thu Jul 6 19:56:57 EDT 2017 x86_64

定义发现规则


image.png

此时扫描到了要监控的主机,并且处于up状态,但并没有加入到监控中,因为还没有定义发现后的处理动作是什么


image.png

定义发现后采用的动作
image.png

image.png

image.png

image.png

3、Web监控

监控指定的站点的资源下载速度,及页面响应时间,还有响应代码;
内建key:
web.test.in[Scenario,Step,bps]:传输速率
web.test.time[Scenario,Step]:响应时长
web.test.rspcode[Scenario,Step]:响应码
对某个主机的web页面创建web监控后会自动使用内建的key进行三项指标的监控
如何创建web监控如下


image.png

image.png

image.png

image.png

image.png

可以在此处查看监控情况


image.png

4、主动和被动检测

  • 被动检测:相对于agent而言;agent, server向agent请求获取配置的各监控项相关的数据,agent接收请求、获取数据并响应给server;
  • 主动检测:相对于agent而言;agent(active),agent向server请求与自己相关监控项配置,主动地将server配置的监控项相关的数据发送给server;
  • agent端所需要基本配置:
    ServerActive= #主动监控时server端的地址
    Hostname= #主动监控时agent端向server端报告自己的主机名,这样服务器端才知道这是谁发过来的监控数据
    HostnameItem= #后面两项如果同时启用通常是第二项有效
    配置完成后,如何添加主动监控项如下图


    image.png

    image.png
  • zabbix_sender发送数据:手动测试agent端向server端发送数据,使用如下的命令,这也是一种主动监控的方式,只不过这种方式不是通过内建的key主动向server端发送数据,而是在agent端通过命令给server端发送数据,一般用于测试用
    zabbix_sender命令的选项
    -z zabbix_server_ip #指明server端的ip
    -p zabbix_server_port #server端端口
    -s zabbix_agent_hostname #agent端主机名
    -k key #自己定义的kye
    -o value #key的值
    为了手动测试,此时添加Item时要随便定义一个不与其它已有key冲突的key,并且item type为“zabbix trapper"


    image.png

    image.png

    在agent端发送一个数据测试一下


    image.png

    此时可以收到数据了
    image.png

    总结:为了减轻server端的压力,监控时一般使用主动监控模式,也就是agent端主动报告监控数据给server端,会极大的提高server端的性能。

5、基于SNMP监控

SNMP监控主要用于监控路由器、交换机等不支持在监控端安装agent接口的设备,此时只能使用简单古老的协议SNMP协议的接口。
监听端口是161/udp被监控端;162/udp监控端监听的端口,如果是主动模式
SNMP协议的版本:v1: 1989,v2c: 1993,v3: 1998
实验时使用的是linux主机,启用SNMP的方法如下

[root@node4 ~]#yum install net-snmp net-snmp-utils #在被监控端安装
[root@node4 ~]#rpm -ql net-snmp
/etc/snmp/snmpd.conf #被监控端的配置文件
/etc/snmp/snmptrapd.conf  #如果启动的是主动模式,server端也
需要安装此软件包,监听端口,这样被监控端才能与之连接,主
动发送数据,此文件是主动监控时server端的配置文件
/usr/lib/systemd/system/snmpd.service   #被动监控时被监控端启动的服务,监听的端口是161/udp
/usr/lib/systemd/system/snmptrapd.service  #主动监控时server端启动的服务,监听的端口是162/udp
也就是说如果是主动监控,server端也要安装net-snmp和net-snmp-utils,并启动snmptrapd.service服务,本实验采用的是被动模式,server端不需要安装
vim /etc/snmp/snmpd.conf 
QQ截图20171123112024.png
开放的监控项的含义
1.1.0:系统描述信息,SysDesc
.1.3.6.1.2.1. 1.3.0:监控时间, SysUptime
 .1.3.6.1.2.1. 1.5.0:主机名,SysName
.1.3.6.1.2.1. 1.7.0:主机提供的服务,SysService                    
.1.3.6.1.2.1. 2.1.0:网络接口数目
.1.3.6.1.2.1. 2.2.1.2:网络接口的描述信息
.1.3.6.1.2.1.2.2.1.3:网络接口类型
[root@node4 snmp]#systemctl start snmpd
[root@node4 snmp]#ss -nlu

可以使用如下命令手动获取监控的数据


image.png

示例:使用snmp接口进行监控


image.png

连接模板到此主机
image.png

示例自己定义一个item


image.png

6、基于JMX的监控

JMX接口主要用于监控像tomcat这种运行于java虚拟机之上的服务。
示例:实现JMX监控tomcat

1、在被监控的主机上安装tomcat组件
[root@node3 ~]#yum install java-1.8.0-openjdk-devel tomcat tomcat-admin-webapps tomcat-webapps -y
[root@node3 ~]#vim /etc/sysconfig/tomcat  #添加如下内容,指
明tomcat主机以及jmx监听的端口为12345,等待server端连接后
获取监控数据
 CATALINA_OPTS="-Djava.rmi.server.hostname=172.18.21.7 -Djavax.management.builder.initial= -Dcom.sun.management.jmxremote=true   
-Dcom.sun.management.jmxremote.port=12345  -Dcom.sun.management.jmxremote.ssl=false  -Dcom.sun.management.jmxremote.authenticate=false"
2、在server端安装zabbix-java-gateway
在server端除了要安装zabbix组件外,还需要安装java网关,因为
zabbix不能直接和JMX接口连接,需要安装java网关才可以
[root@node1 ~]#yum install zabbix-java-gateway
[root@node1 ~]#systemctl start zabbix-java-gateway.service 
[root@node1 ~]#ss -nlt  ---发现监听的端口是10052
3、修改zabbix-server端设置
[root@node1 ~]#vim /etc/zabbix/zabbix_server.conf 
JavaGateway=172.18.21.107 #server端的ip地址
JavaGatewayPort=10052   #JavaGateway监听的端口
StartJavaPollers=5   #启动的进程数
[root@node1 ~]#systemctl restart zabbix-server.service   #重新启动服务
[root@node1 ~]#systemctl status zabbix-server.service #查看状态是否启用了java poller,说明java-gateway的监控功能启用了

image.png

jmx的详细文档: https://docs.oracle.com/javase/1.5.0/docs/guide/management/agent.html

7、Zabbix Proxy的配置

为了减轻zabbix-server端的压力,常常需要配置多个proxy代理代替server端去监控主机,并将结果反馈给server端,在proxy上数据先短时的存入自己主机的mysql数据库中,并不断将监控的数据发送至server端。


image.png

示例

1、在proxy上的配置
[root@node3 ~]#yum install mariadb-server
[root@node3 ~]#vim /etc/my.cnf.d/server.cnf 
[server]
skip_name_resolve = on
innodb_file_per_table = on
max_connections = 20000
innodb_buffer_pool_size = 256M
log_bin = bin-log
[root@node3 my.cnf.d]#systemctl start mariadb
MariaDB [(none)]> create database zbxproxydb character set 'utf8'; #创建一个数据库
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all on zbxproxydb.* to zbxproxyuser@'172.18.21.7' identified by 'centos';
Query OK, 0 rows affected (0.00 sec)
[root@node3 my.cnf.d]#yum install zabbix-proxy-mysql zabbix-get zabbix-sender zabbix-agent #因为要监控自己,所以安装了zabbix-sender zabbix-agent
[root@node3 my.cnf.d]#rpm -ql zabbix-proxy-mysql
/usr/share/doc/zabbix-proxy-mysql-3.4.4/schema.sql.gz
[root@node3 my.cnf.d]#cd /usr/share/doc/zabbix-proxy-mysql-3.4.4/
[root@node3 zabbix-proxy-mysql-3.4.4]#ls
AUTHORS  ChangeLog  COPYING  NEWS  README  schema.sql.gz
[root@node3 zabbix-proxy-mysql-3.4.4]#zcat schema.sql.gz >schema.sql
[root@node3 zabbix-proxy-mysql-3.4.4]#ls
AUTHORS  ChangeLog  COPYING  NEWS  README  schema.sql  schema.sql.gz
[root@node3 zabbix-proxy-mysql-3.4.4]#mysql -uzbxproxyuser -pcentos -h172.18.21.7 zbxproxydb < schema.sql #创建表
2、在proxy上修改的配置文件
[root@node3 zabbix-proxy-mysql-3.4.4]#vim /etc/zabbix/zabbix_proxy.conf 
Server=172.18.21.107 #指明server主机的ip
Hostname=node3.magedu.com #指明自己的主机名,这样server端才能识别出这个代理
ServerPort=10051 #server监听的端口,这里要根据server端真正
的监听端口而写,并不一定是10051,如果是被动模式,也就是
server端主动向proxy获取数据时此项可以忽略,主动模式指的是
proxy主动发送监控的数据给server端,一般都是主动模式,以减
轻server端的压力
EnableRemoteCommands=1#允许server端在本机远程执行命令
LogRemoteCommands=1 #远程执行命令时记录到日志中
DBHost=172.18.21.7
DBName=zbxproxydb
DBUser=zbxproxyuser
DBPassword=centos
ConfigFrequency=30 #proxy主动获取server端配置数据的时间间隔
[root@node3 zabbix-proxy-mysql-3.4.4]#systemctl start zabbix-proxy.service 
[root@node3 zabbix-proxy-mysql-3.4.4]#systemctl status zabbix-proxy.service 
3、在agent端的配置
[root@node4 snmp]#vim /etc/zabbix/zabbix_agentd.conf 
Server=172.18.21.7 #被动监控下允许proxy过来采集数据
ServerActive=172.18.21.7#主动监控下将数据发送给proxy,而不是server了
[root@node4 snmp]#systemctl restart zabbix-agent.service 

创建代理


6854348-9ce04832ea987915.png

image.png

image.png

image.png

总结:一般情况下proxy使用主动模式,也就是proxy主动将监控的数据报告给server端,这样就可以减轻server端的压力,server端也不必主动去寻找proxy。

8、如何通过官方提供的share.zabbix网站配置监控nginx服务

zabbix官方提供的监控各种服务该如何配置以及监控项的模板的网站:https://share.zabbix.com/
进入该网站,搜索nginx
选择Nginx for Zabbix 3.2 会跳转至github上的此网站:
https://github.com/oscm/zabbix/tree/master/nginx
根据此网站进行一步一步的配置即可
下载时用wget命令下载raw格式

image.png

image.png

image.png

9、zabbix调优

  • Database:
    历史数据不要保存太长时长;
    尽量让数据缓存在数据库服务器的内存中,这就要求根据物理内存情况将数据库的innodb_buffer_pool_size 设置的尽量大一些;
    触发器表达式:减少使用min(), max(), avg()等聚合运算;尽量使用last(),nodata();
    数据收集:polling较慢(减少使用SNMP/agentless/agent);尽量使用trapping(agent(active)),也就是尽量使用主动监控模式;
    数据类型:文本型数据处理速度较慢;尽量少收集类型为text或string类型的数据;多使用类型为numeric的;
    分表:将以下以打头的表进行分表操作,存放在不同的服务器上
    history_*
    trends*
    events*
  • zabbix服务器的进程:
    (1) 服务器组件的数量;alerter, discoverer, escalator, http poller, hourekeeper, icmp pinger, ipmi polller, poller, trapper, configration syncer, ...
    StartPollers=60 #各种pollers就是监控时启动的进程数
    StartPingers=10
    StartDBSyncer=5
    (2) 设定合理的缓存大小
    CacheSize=8M
    HistoryCacheSize=16M
    HistoryIndexCacheSize=4M
    TrendCacheSize=4M
    ValueCacheSize=4M
    总结:zabbix是一种小型的轻量级的监控系统,对于监控中小型企业有很好的实用性,大型企业使用比较重量型的监控系统,比如openfalcon
    image.png

推荐阅读更多精彩内容

  • Zabbix简介 Zabbix官方网站Zabbix中文文档 本文系统环境是CentOS7x86_64, Zabbi...
    Zhang21阅读 4,563评论 0 35
  • 1、Zabbix简介 监控数据采集通道SNMP:Simple Network Management Protoco...
    张大志的博客阅读 252评论 0 3
  • zabbix server: 负责接收agent发送的报告信息的核心组件,所有配置、统计数据及操作数据均由其组织进...
    uangianlap阅读 2,256评论 2 3
  • 我欲用诗歌做成八抬大骄抬着明月绕天光 我欲用国庆的喜悦滋润万家灯火幸福绵长 我欲要嫦娥姐姐美好心愿围在你窗外妖娆 ...
    江城妖怪阅读 30评论 2 3
  • 夜,何其美丽。摇拽着点点星光,衬托这一份温情脉脉,醉了红颜,也醉了星辰,不期望能站在多高的顶端,只希望执子之手,共...
    落落无颜阅读 77评论 0 2