11月22日 Zabbix监控系统 2

2017-11-22  本文已影响0人  张大志的博客

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、网络发现

[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、主动和被动检测

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调优

上一篇 下一篇

猜你喜欢

热点阅读