11月20日 Zabbix 监控系统 1

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、创建一个主机组


image.png

3、创建要监控的主机


image.png

4、添加要监控的项,点击config--->hosts--->item
image.png

5、添加触发器
image.png

6、定义媒介,也就是报警信息的传递通道
有两种方式:
第一种发邮件


image.png

image.png

第二种:通过脚本发送短信或者微信
image.png

定义此种媒介的时候要在配置文件中定义脚本的路径
vim /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts ---网上有很多发短信的脚本,只要把脚本放到此路径下就可以了,但要申请短信网关
7、给监控系统的管理用户添加定义的媒介,这样报警的时候就会通过这个媒介发给用户
image.png
image.png

同样的script媒介也这样添加给用户
8、添加actions
actions包括conditions和operations
conditions:多个条件之间存在逻辑关系
operations:条件满足时触发的操作


image.png

image.png

image.png

image.png

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
就是将多个监控项整合到一幅图里


image.png

image.png

image.png

可以定义多幅图
定义后怎么看graph


image.png

2、定义screen
屏幕是在graph的基础上创建的,多个graph合成一个屏幕
image.png

image.png

image.png

image.png

image.png

点击change添加即可
image.png

3、定义slide show
也就是定义幻灯片


image.png

image.png

5、创建和使用模板

image.png

image.png

如何链接模板只主机


image.png

image.png

也可以将模板链接到其他模板


image.png

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}
命名方式:大写字母、数字和下划线;
如何自定义宏
自定义全局宏:对所有主机都有效

image.png

image.png

自定义模板宏,只对链接到此模板的主机有效
image.png

自定义主机宏,只对当前主机有效
image.png

将变量改为6380后发现为down状态了
在redis配置文件中将端口改为6380并重启服务后发现监控的结果又变回up状态了
说明全局宏的作用范围虽然很大,但优先级最低,定义了主机宏后,全局宏就不起作用了。

推荐阅读更多精彩内容