一、安装
- 常用监控系统架构:
数据采集–数据存储–数据分析、展示、告警 - 安装依赖:
数据库、Apache、PHP、gd、bcmath、ctype、libXML、xmlreader、session、socket、mbstring、mbstring、gettext、ldap
OpenIPMI、libssh2、fping、libcurl、libiksemel、libxml2、net-snmp(下面是服务器额外依赖) - 安装:
- 1、安装zabbix-server、zabbix-web
yum install zabbix-server-mysql zabbix-web-mysql
- 2、安装数据库
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql-community-server
- 3、创建database
mysql -uroot -p -e 'create database zabbix character set utf8 collate usf8 bin;'
- 4、创建用户
mysql -uroot -p -e 'grant all privileges on zabbix.* to zabbix@'%' identified by 'zabbix';flush privileges;'
- 5、导入数据库
zcat /usr/share/doc/zabbix-server-mysql-3.0.8/create.sql.gz | myql -uzabbix -pzabbix zabbix
- 6、修改apahe配置的ServerName
vim /etc/httpd/conf.d/httpd.conf
ServerName 127.0.0.1:80
启动apahe:
systemctl enable httpd
systemctl start httpd
- 7、修改zabbix页面配置文件:/etc/httpd/conf/zabbix.conf
- 8、打开页面:192.168.19.203/zabbix, 默认用户名密码:Admin,zabbix
页面上配置链接zabbix用户的数据库:会生成配置文件/etc/zabbix/web/zabbix.conf.php - 9、修改zabbix-server配置文件:
vim /etc/zabbix/zabbix_server.conf
DBPassword=zabbix
(数据库密码) - 10、启动zabbix-server
systemctl start zabbix-server;
systemctl enable zabbix-server;
- 11、在被监控的机器上安装zabbix-agent:
yum install zabbix-agent
修改配置:
vim vim /etc/zabbix/zabbix_agentd.conf
Server:zabbix-server的ip地址
ServerActive:当agent以主动模式配置
Hostname :主机名
web界面上:配置->主机->启用指定客户端
- 1、安装zabbix-server、zabbix-web
二、常用命令
zabbix_get -s [主机名] -k [监控项] ->只能取agent的监控项的值
zabbix_agentd -p ->获取机器上所有软件,监控项(前面是key后面是值,u:正整数,d:浮点数,s:字符串)
zabbix_server -R config_cache_reload:重新加载配置文件
三、添加自定义items
进入指定客户端目录:
cd /etc/zabbix/zabbix-agent.d/
-
1.新建配置文件(agent)
vim monitor_file.conf
UserParameter=monitor_file, stat -c %s /etc/service
# 前面是key,后面是取值方法 -
2.重启zabbix-agent
systemctl restart zabbix-agent
-
3.server机器上获取监控的值(测试一下)
zabbix_get -s linux-node2.example -k monitor_file
-
4.界面上新建item(可以参考其他item)
Configure->Hosts->主机->items
一些配置项:key:monitor_file(监控项) Host interface: ip:port Type of information:文本类型 units:单位 Use custom multiplier:自定义乘以多少倍,解决数值大了,单位的问题 Store value(存储值):Delta(speed per second:取一段时间内的平均值) New application:define(自定义的意思) Update interval:间隔时间 Custom interval:自定义监控时间 Show value:显示的类型(例如:Service state[成功返回1,失败返回0],可以去Administrator->General中查看所有类型详细,也可以新建)```
-
解决乱码:从本机上C->Windows->Fonts中选择一个字体上传到zabbix-server的/usr/share/zabbix/fonts,替代原来的文件
四、注意
-
自定义脚本报警:
自定义脚本报警(可在添加微信报警时用):脚本必须放在目录:/usr/lib/zabbix/alertscripts/
短信报警:阿里大于等第三方短信平台
邮件报警:记得打开邮件smtp的相关服务 -
添加主机注意:
Host name:如果是被动模式则没什么要求,如果是主动模式必须与配置文件中一一对应,并且Host name在数据库中值是唯一的,所以不能重复
五、监控各种东西
-
web监控:
configuration->hosts->主机->web 检测->创建web监测
Scenario->
Agent:选择模拟浏览器
steps->模拟完成的操作
URL:访问的网址
Required string:正常情况返回的字符串
Required status codes:正常情况返回的状态码
-
监控mysql
- 1、/etc/zabbix/zabbix_agent.d/下默认的配置就是监控mysql的配置,可以自己在需要添加用户名密码的位置填上用户名密码,也可以填上$1, $2…,在监控项中传参
- 2、重新加载配置文件:zabbix_server -R config_cache_reload
- 3、修改Template App MySQL模板:
- a、选中模板:Macros下
Template macros(添加变量):
{KaTeX parse error: Expected 'EOF', got '}' at position 5: USER}̲=>数据库用户名 {PASSWD}=>密码 - b、修改items:
选中items:
修改key使其可以传递上面定义的变量,及在mysql.status[]中括号内对应位置添加{KaTeX parse error: Expected 'EOF', got '}' at position 5: USER}̲,{PASSWD},具体位置根据配置文件内定义的传递参数$来决定
- a、选中模板:Macros下
-
监控网络设备(交换机,路由器)
- 添加主机:
Host:添加SNMP接口
模板:使用SNMP模板
Macros:配置团体名:团体名默认是public,根据交换机配置修改{KaTeX parse error: Expected 'EOF', got '}' at position 15: SNMP_COMMUNITY}̲,{ZABBIX_SERVER_IP}:zabbix_server的ip
- 添加主机:
-
监控tcp的状态
- tcp11种状态(配图tcp3次握手4次挥手):
- 客户端独有的:(1)SYN_SENT (2)FIN_WAIT1 (3)FIN_WAIT2 (4)CLOSING (5)TIME_WAIT 状态转移:CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED
- 服务器独有的:(1)LISTEN (2)SYN_RCVD (3)CLOSE_WAIT (4)LAST_ACK
- 状态转移:CLOSED->LISTEN->SYN_RCVD ->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED
- 共有的:(1)CLOSED (2)ESTABLISHED
- 获取tcp状态:netstat -ant 或 ss -at 或 man ss
- 步骤
- 1.添加配置文件(/etc/zabbix/zabbix_agent.d/TCP_Status.conf)
UserParamenter=TCP_Status[*],netstat -ant |grep -c $1
- 2.重启zabbix_agent
systemctl restart zabbix_agent
- 3.创立模板
添加模板名名、组即可 - 4.选择模板,添加items
Key:TCP_Status[TIME_WAIT](中括号内为tcp状态参数,可以将所有tcp状态参数都建一个items)
Application:组名
- 5.创建主机,添加监控模板
- 1.添加配置文件(/etc/zabbix/zabbix_agent.d/TCP_Status.conf)
- tcp11种状态(配图tcp3次握手4次挥手):
-
监控nginx
- 1.修改nginx的配置文件nginx.conf:
location /nginx_status{ stub_status on;(主要把stub_status开启) access_log off; allow 192.168.56.0/24; allow 127.0.0.1; deny all; }
- 2.添加监控配置文件(先把zabbix配置文件中的包含改为Include=/etc/zabbix/zabbix_agentd.d/*.conf)
UserParameter=nginx_status[*],/etc/zabbix/zabbix_agentd.d/nginx_monitor.sh $1
- 3.将监控脚本(主要命令是:curl 127.0.0.1/nginx_status(根据nginx.conf))放在/etc/zabbix/zabbix_agentd.d下
- 4.导入模板
- 1.修改nginx的配置文件nginx.conf:
-
JMX(主要用来监控java程序)监控tomcat
- 1、
yum install -y zabbix-java-gateway
(依赖java,需要先安装java) - 2、在tomcat的catalina.sh文件中
- 1、
CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote
-Djava.rmi.server.hostname=192.168.23.1 #tomcat 所在ip
-Dcom.sun.management.jmxremote.port=9999 #开放的端口
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false"
-
3、可在windows下安装监控工具:JConsole或Visual VM连接用户端口监控
-
4、命令行取对应监控值
java -jar cmdline-jmxclient.jar(需要下载这个jar包) - tomcat的ip:监控端口 监控项object(需要将引号转义)
-
5、zabbix中添加主机
- Host:
添加JMX interface :ip地址为tomcat地址,port也是第二步中配置的端口
- Templates:
Template JMX Generic Java JMX
Template JMX Tomcat Tomcat JMX -
监控window服务器
- 1、下载windows版本agent的源码包(source)、Server(zabbix_server的ip地址)、ServerActive、Hostname
- 2、修改配置文件(bin目录zabbix_agentd.win.conf)
修改LogFile(日志路径), - 3、打开命令行,切换到源码包的bin目录下
- 安装:
zabbix_agentd.exe -c zabbix_agentd.win.conf -i
- 启动:
zabbix_agentd.exe -c zabbix_agentd.win.conf -s
- 安装:
- 4、创建主机
- Templates:
Template OS windows
- Templates:
- 5、windows程序目录下打开SNMP功能,然后到服务(SNMP service)中配置,在“安全”选项中添加zabbix服务器的ip和添加社区,
- 6、zabbix-server命令行:snmpwalk -c 社区名 -v2c(版本) OID
- 7、主机中把监控windows的SNMP的模板加上
-
监控mysql(percona模板)
- 1、安装percona的rpm包
- 2、yum install -y php php-mysql
- 3、将/var/lib/zabbix/percona/templates下的.conf配置文件拷贝到/etc/zabbix/zabbix-agent.d/目录下
- 4、修改/var/lib/zabbix/percona/script/get_mysql_stats_wrapper的脚本
RES=‘HOME=-zabbix mysql -uzabbix -pzabbix -e "..."’
(…中填写操作命令) - 5、修改ss_get_mysql_stats.php脚本
配置mysql用户名密码 - 6、重启agent
systemctl restart zabbix-agent
- 7、将/var/lib/zabbix/percona/templates的xml模板导入zabbix-server中
- 8、创建host,添加导入的模板
六、zabbix升级
注:网上许多模板基于较低版本做的,可以将模板正常导入后,升级到高版本,模板也会升级到高级版本,然后导出
数据库越大升级时间越长,最好用screen
- 1、先备份数据库
- 2、停止zabbix-server和数据库
- 3、安装高版本的yum源
- 4、
yum -y install zabbix-web-mysql zabbix-server-mysql
- 5、启动数据库和zabbix-server
七、zabbix主动模式(监控日志等)
- 1、准备模板
完整克隆一份模板,重命名,然后将所有监控项的Type修改为"Zabbix agent(active)",并将其链接模板也修改为一个主动模式的模板,修改discovery中的自动发现时间,可以先改短点,完事之后再改回去 - 2、修改zabbix_agentd.conf
去掉Serverip,将StartAgents=0,配置ServerActive地址为服务端地址,HostnameItem=system.hostname - 3、添加主机
主机名必须填为agentd真正的主机名(被动模式可以随便填),Agent interface可以不填,添加主动模式的监控模板
八、trapper模式
- 1、准备模板
将监控项类型设置为trapper,为了安全可以设置允许发送的客户端主机 - 2、客户端安装zabbix-sender
yum install -y zabbix-sender
- 3、客户端命令
zabbix_sender -z 服务器ip -s "客户端主机,跟zabbix创建主机的主机名一一对应" -k "监控项" -o "给监控项传递的参数"
- 4、该命令会将结果直接传送到zabbix-server上,可以写守护进程脚本,然后用zabbix_sender发送脚本产生的值,zabbix_sender可以批量发送文件中的数据
九、自动化监控网络发现:
- 低级自动发现(可以自动发现items,触发器,主机等)
- 1、选择模板或主机->选择自动发现->创建自动发现
- 2、填写自动发现规则->过滤器中添加过滤条件:例子:
{#FSTYPE} equal @File systems for discovery
其中File systems for discovery作为正则匹配规则,可以在"Administrator"->“agentd”->右上角"正则表达式"中看到
- 低级自动发现之mysql多实例(一台机器上多个mysql如何监控)
- 1、一台机器启动多个mysql实例
a、修改mysql配置文件,复制两份,分别修改socket地址、log文件地址、pid文件地址
b、初始化mysql实例mysql_install_db --user=mysql --defaults-file=/etc/my3307.cnf(指定刚才修改的配置文件)
c、启动:mysqld_safe --default-file=/etc/my3307.cnf & - 2、创建脚本,取mysql占用端口
vim /etc/zabbix/zabbix.conf.d/discovery_mysql.sh
res=`netstat -ntlp |grep mysqld -F "[ :]+" '{print $5}'`
port=($res)
输出json格式
(脚本自己补全)- 查看脚本输出数据是否为json格式
sh discovery_mysql.sh | python -m json.tool
- zabbix用户没有netstat -ntlp的权限,加个suid权限
chmod u+s /usr/bin/netstat
- 查看脚本输出数据是否为json格式
- 3、创建自定义discovery的key
vim /etc/zabbix/zabbix_agentd.d/discovery_mysql.conf
UserParameter=discovery_mysql,sh /etc/zabbix/zabbix_agentd.d/discovery_mysql.sh
systemctl restart zabbix-agent
- 4、界面上创建discovery规则
- 5、创建item的userparameter_mysql的key,用来在discovery规则中创建item原型
vim /etc/zabbix/zabbix_agentd.d/userparameter_mysql.confUserParameter=mysql.status[*],echo "show global status where Variable_name='$2';" |HOME=/var/lib/zabbix -uroot -p123456 -h 127.0.0.1 -P $1 -N |awk '{print $$2}'
- 修改mysql实例的密码:
mysqladmin -h 127.0.0.1 -uroot password '123456' -P3306
mysqladmin -h 127.0.0.1 -uroot password '123456' -P3307
- 修改mysql实例的密码:
- 6、界面上选择创建的discovery规则,创建item prototypes(item原型),照着官方自带的一个个创建
key填:mysql.status[{#MYSQLPORT},Com_begin]
- 1、一台机器启动多个mysql实例
十、zabbix高可用
- 1、准备两台zabbix-server,至少一台zabbix-agent
- 2、做数据库的双组
-
1)停止zabbix-server
-
2)修改数据库配置my.cnf,加上3行配置:
log-bin=/var/lib/mysql/mysql.bin server-id = 1(另一台zabbix-server修改其他大于1的数) skip-name.resolve
-
3)重启数据库
-
4)创建用户
mysql> GRANT REPLICATION SLAVE on *.* to 'rep'@192.168.19.% IDENTIFIED BY 'rep';
mysql> flush privileges;
-
5)导出数据
mysqldump -uroot -p --max_allowed_packet=1048576 --net_buffer_length=16384 -A --events -x --master-data=1 >/tmp/zabbix_back.sql
将导出的sql文件导入另一台zabbix-server数据库中 -
6)从库中导入主库导出的数据
mysql < zabbix_back.sql
mysql中:导入用户名密码(主库用户名密码信息)mysql <<EOF CHANGE MASTER TO MASTER_HOST='192.168.19.202', MASTER_PORT=3306, MASTER_UESR='rep', MASTER_PASSWORD='rep' EOF
-
7)开启同步(从库中)
mysql> slave start
mysql> show slave status
-
8)照上面的操作,使主库同步从库的数据,使其互为主从库
-
- 3、zabbix-server中使用keepalived
- 1)安装keepalived
yum install -y keepalived
- 2) 修改keepalived配置文件
global_def {
router_id LVS_DEVEL1 (两台router_id不能一样)
}
vrrp_instance VI_l {
state MASTER (另一台改为BACKUP)
interface eth0
virtual_router_id 51
priority 150 (BACKUP机器的权重可以改小一点)
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.19.200/24 dev eth0 label eth0:1
}
notify_master /opt/to_master.sh
}
- 3)编写to_master.sh脚本
yum install sshpass
touch /opt/to_master.sh
chmod +x /opt/to_master.sh
vim /opt/to_master.sh
#!/bin/bash
systemctl start zabbix-server
sshpass -p 123456 ssh -o StrictHostKeyChecking=no root@192.168.19.203(另一台server机器ip) "sytstemctl stop zabbix-server "
ping 192.168.19.200(keepalived配置文件中的定义的虚拟ip) -c 1 &>/dev/null
- 4)修改zabbix-server.conf
SourceIP=192.168.19.200 (vip) - 5)启动keepalived、zabbix-server
systemctl start keepalived
systemctl start zabbix-server - 6)修改客户端配置文件zabbix-agentd.conf
SourceIP=192.168.19.205(客户端本身的ip)
Server=192.168.19.200(vip)
十一、zabbix-api
详情参考官网
- 事例(新增主机):
curl -s -X POST -H 'Content-Type:application/json' -d'
{
"jsonrpc":"2.0",
"method":"host.create"(创建主机命令),
"parmas":{
"host":"Linux server"(主机名),
"interfaces":[
{
"type":1,
"main":1,
"userid":1,
"ip":"192.168.19.202"(创建主机的ip),
"dns":"",
"port":"10050"
}
],
"group":[
{
"groupid":"50"
}
],
"template":[
{
"templateid": "20045",
}
]
},
"auth": "safdafdsa"(登陆返回的cookies值),
"id":1
}' http://192.168.19.204/zabbix/api_jsonrpc.php |python -m json.tool
十二、安装zabbix_proxy
yum install zabbix_proxy_mysql
yum install mariadb-server
systemctl enable mariadb.service
systemctl start mariadb.service
mysql -uroot -p -e `create database zabbix_proxy CHARACTER set utf8 COLLATE utf8_bin;`
mysql -uroot -p -e `grant all on zabbix_proxy.* to zabbix@'localhost' identified by '123.Com';`
zcat /usr/share/doc/zabbix-proxy-mysql-3.0.8/schema.sql.gz|mysql -uzabbix -p123.Com zabbix_proxy
十三、监控日志
主机类型必须选择主动模式的:Zabbix agentd(active)
key值选择log[/var/log/zabbix/zabbix.log]
Type of information:Log