1、Zabbix简介
- 监控数据采集通道
SNMP:Simple Network Management Protocol
ssh/telnet
IPMI
agent:master/agent
JMX:Java Management eXtens - zabbix程序的组件:
zabbix_server:服务端守护进程(server是监控端);
zabbix_agent:agent守护进程(agent是被监控端);
zabbix_proxy:代理服务器,可选组件;
zabbix_get:命令行工具,手动测试向agent发起数据采集请求;
zabbix_sender:命令行工具,运行于agent端,手动向server端发送数据,称为主动模式,sever端向agent端发起数据请求称为被动模式。
zabbix_java_gateway: java网关;
zabbix_database:MySQL或PostgreSQL;
zabbix_web:Web GUI用于配置Zabbix的管理页面 - zabbix逻辑组件:
主机组
主机
监控项(item)
key:实现获取监控的目标上的数据的命令或脚本的名称;
zabbix_get -s 172.18.21.7 -p 10050 -k "system.cpu.intr"
server端通过key也就是一个命令的名称或者脚本的名称手动获取agent端的数据
应用(application):同一类监控项的集合;
触发器(trigger):表达式;PROBLEM, OK;
事件(event):
动作(action):由条件(condition)和操作(operation)组件;
媒介(media):发送通知的通道;
通知(notification):
远程命令(remote command):
聚合计算:将监控采集到的数据进行最大值、最小值、平均值等计算
报警升级():
模板(template):快速定义被监控主机的各监控项的预设项目集合;
图形(graph):用于展示历史数据或趋势数据的图像;
屏幕(screen):由多个graph组成;
2、Zabbix的安装
将server和agent主机的yum仓库的路径指向Zabbix的官方网站:http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/
安装环境,这里为了方便将数据库服务器、web服务器和Zabbix安装到同一台主机上,生产中最好分开
环境准备:同步所有主机的时间,设置主机名并修改/etc/hosts文件,保证所有主机能互相解析主机名
1、在server端安装数据库,并配置、启动
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
systemctl start mariadb
mysql_secure_installation ---数据库初始化,删除匿名账号登录等
MariaDB [(none)]> create database zbxdb character set 'utf8'; ---创建一个zabbix存数据的数据库
MariaDB [(none)]> grant all on zbxdb.* to zbxuser@'172.18.21.107' identified by 'centos'; ---授权的一个用户可以连接到这个数据库
2、在server端安装Zabbix组件
[root@node1 network-scripts]#yum list all |grep -i zabbix ---可以查看一下都有哪些包
[root@node1 network-scripts]#yum install zabbix-agent zabbix-get zabbix-sender zabbix-server-mysql zabbix-web zabbix-web-mysql ---这里Zabbix要自己监控自己,所以也安装了zabbix-agent和zabbix-sender,注意安装的时候epel源仓库要好的,因为会安装依赖的包在epel源里
3、在数据库中创建表
[root@node1 network-scripts]#rpm -ql zabbix-server-mysql ---查看生产的文件,可以看到有如下一个脚本文件
/usr/share/doc/zabbix-server-mysql-3.4.4/create.sql.gz ---此文件用于生成数据库的表
[root@node1 network-scripts]#cd /usr/share/doc/zabbix-server-mysql-3.4.4/
[root@node1 zabbix-server-mysql-3.4.4]#zcat create.sql.gz > create.sql ---解压文件
[root@node1 zabbix-server-mysql-3.4.4]#head -n 20 create.sql ---查看一下这个文件可以看到里面是创建表的操作
[root@node1 zabbix-server-mysql-3.4.4]#mysql -uzbxuser -pcentos -h172.18.21.107 zbxdb < create.sql
mysql -uzbxuser -pcentos -h172.18.21.107 zbxdb ---后面加数据库名可以直接进入此数据库,不用登陆后use方式切换
MariaDB [zbxdb]> show tables; ---可以看到生成了很多表
4、修改Zabbix的配置文件,并启动服务
[root@node1 zabbix-server-mysql-3.4.4]#vim /etc/zabbix/zabbix_server.conf
ListenPort=10051 ---主动模式下server端监听的端口
SourceIP=172.18.21.107 ---采集数据时使用的ip地址
LogFileSize=1 ---日志是否滚动,1表示滚动
DBHost=172.18.21.107
DBName=zbxdb
DBUser=zbxuser
DBPassword=centos
[root@node1 zabbix]#systemctl start zabbix-server ---启动服务,注意要先启动数据库服务器,再启动zabbix
5、修改时间,启动httpd服务
[root@node1 zabbix]#vim /etc/php.ini
date.timezone = Asia/Shanghai ---设置时区
也可以修改这个文件中的时区/etc/httpd/conf.d/zabbix.conf---不过这个文件中的时区只对zabbix这个web网站有效
[root@node1 zabbix]#systemctl start httpd
6、访问zabbix网站进行安装zabbix
http://172.18.21.107/zabbix/setup.php
安装完成后需要登录默认的管理账号:用户名:admin,密码:zabbix
登录后先修改用户名和密码保证安全
7、在agent端安装如下软件包
[root@node3 ~]#yum install zabbix-agent zabbix-sender
[root@node3 ~]#vim /etc/zabbix/zabbix_agentd.conf ---修改agent的配置文件
LogFileSize=1 ---滚动日志
EnableRemoteCommands=1 ---允许server端在agent端远程执行命令,执行命令的时候是在agent端执行的
LogRemoteCommands=1 ---远程执行命令的时候记录日志
Server=172.18.21.107 ---被动模式下允许哪个server过来采集数据
ListenPort=10050 ---被动模式下监听的端口
ListenIP=0.0.0.0 ---被动模式下监听的ip,0.0.0.0表示本地的所有ip
StartAgents=3 ---启动的进程数,用于监听端口,等待server端连接后采取数据
ServerActive=172.18.21.107 ---主动模式下将数据发送给哪个server主机
Hostname=node3.magedu.com ---自己的主机名,主动模式下要告诉server端主机的主机名,不然server端不知道这是谁的数据
[root@node3 ~]#systemctl start zabbix-agent ---启动agent服务
总结:要布置好一个监控系统,在server端要准备好Zabbix服务、数据库服务、web服务,在agent端要准备好Zabbix-agent服务,如果server端要自己监控自己,也要准备好Zabbix-agent服务。
3、实现监控一个主机的redis服务,并实现报警和自动恢复功能
1、在agent端安装好redis服务,并启动
2、创建一个主机组
3、创建要监控的主机
4、添加要监控的项,点击config--->hosts--->item
5、添加触发器
6、定义媒介,也就是报警信息的传递通道
有两种方式:
第一种发邮件
第二种:通过脚本发送短信或者微信
定义此种媒介的时候要在配置文件中定义脚本的路径
vim /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts ---网上有很多发短信的脚本,只要把脚本放到此路径下就可以了,但要申请短信网关
7、给监控系统的管理用户添加定义的媒介,这样报警的时候就会通过这个媒介发给用户
同样的script媒介也这样添加给用户
8、添加actions
actions包括conditions和operations
conditions:多个条件之间存在逻辑关系
operations:条件满足时触发的操作
9、在agent端修改sudo的配置文件
[root@node3 ~]#visudo ---修改sudo的配置文件
Defaults:zabbix !requiretty ---因为server端控制agent端以zabbix用户执行命令时是以守护进程的方式执行的,以守护进程的方式执行时不在任何终端上,但sudo在某个tty终端上才能执行,所以要在sudo的配置文件中定义zabbix用户执行sudo命令时不需要在终端上进行
zabbix ALL=(ALL) NOPASSWD:ALL ---授权zabbix用户在所有主机代表所有用户执行所有操作,并且不用输入密码
10、测试
停止redis服务,发现报警后过一会就会恢复,因为执行了第一步重启操作,恢复后在sever端可以收到发给root的邮件。
4、展示接口
graph: simple, custom
screen:把多个graph整合于同一屏幕进行展示;
slide show:把多个screen以slide show的方式进行展示
1、定义graph
就是将多个监控项整合到一幅图里
可以定义多幅图
定义后怎么看graph
2、定义screen
屏幕是在graph的基础上创建的,多个graph合成一个屏幕
点击change添加即可
3、定义slide show
也就是定义幻灯片
5、创建和使用模板
如何链接模板只主机
也可以将模板链接到其他模板
6、宏(macro)
宏也就是变量,定义后在任何位置都可以引用这些变量,比如在创建action的operations时就调用了很多内建的宏来定义报警后发送的邮件的标题和内容
级别:
全局宏:Administration --> General --> Macros ,对全局都有效,但优先级低,作用范围广
模板宏:编辑模板 --> Macros,对链接到此模板的所有主机都有效,优先级比全局宏要高
主机宏:编辑主机 --> Macros ,只对单个主机有效
类型:
内建:{MACRO_NAME},两边不能有空格
文档: https://www.zabbix.com/documentation/3.4/manual/appendix/macros/supported_by_location
自定义:{$MACRO_NAME}
命名方式:大写字母、数字和下划线;
如何自定义宏
自定义全局宏:对所有主机都有效
自定义模板宏,只对链接到此模板的主机有效
自定义主机宏,只对当前主机有效
将变量改为6380后发现为down状态了
在redis配置文件中将端口改为6380并重启服务后发现监控的结果又变回up状态了
说明全局宏的作用范围虽然很大,但优先级最低,定义了主机宏后,全局宏就不起作用了。