一、zabbix服务初了解
1、zabbix系统概述
(1)数据采集:周期性时序数据
》 主机/对象:服务器、路由器、交换机、存储、防火墙、IP、PORT、URL、自定义监控对象...
》 采集目标:监控项,指标数据(metrics data)
(2)数据存储:
》 存储系统:
SQL: MySQL/MariaDB(Zabbix)
NoSQL:Redis(Open-falcon)
rrd: Round Robin Database(Cacti)
(3)数据:
》 历史数据: 每个监控项采集到的每个监控值
》 趋势数据: 趋势表里主要保留某个监控项一个小时内历史数据的最大值、最小值和平均值以及该监控项一个小时内所采集到的数据个数。
(4)阈值:severity,可按照等级实现层级报警
(5)告警:email, 短信, 微信,语音,故障自治愈
2、zabbix的四大核心任务
(1)采集:zabbix-server, zabbix-proxy,zabbix-agent
》 Agentless:SNMP,Telnet,ssh,IPMI, JMX,
》 Agent:zabbixagent
(2)存储: zabbixdatabase
(3)展示:zabbixweb
》graph -> screen -> slideshow(将多个screen以幻灯片的方式进行轮流展示)
(4)告警:
》 host (host groups) <-templates
》 host -> items -> triggers -> action (条件-conditions, 操作-operations)
二、使用apt模式安装程序
详细的安装步骤可以参考zabbix的官方网站,确认使用的系统和内核版本,按操作进行
https://www.zabbix.com/cn/download
1、确认zabbix的安装路径(如果下载路径不能识别,删除原文件/etc/apt/sources.list的数据,替换为阿里云的镜像路径)
wget https://repo.zabbix.com/zabbix/4.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_4.0-3%2Bfocal_all.deb
dpkg -i zabbix-release_4.0-3+focal_all.deb
apt update #刷新本地的镜像源
2、安装zabbix server,web前端、zabbix agent
apt install zabbix-server-mysql zabbix-frontend-php zabbix-agent
3、创建初始数据库
(1)安装数据库
apt-get install mysql-server
(2)修改数据库配置文件(默认数据库监控在127地址上,保证可以正常链接数据库)
vim /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 192.168.43.108
#mysqlx-bind-address = 127.0.0.1
(3)创建zabbix用户以及授权(导入数据前,先检查是否可以正常连接数据库)
create database zabbix character set utf8 collate utf8_bin;
create user zabbix@'192.168.43.108' identified by '123456';
grant all privileges on zabbix.* to zabbix@'192.168.43.108';
(4)数据库中导入初始数据
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
4、修改zabbix server配置文件
(1)配置数据库账户密码
vim /etc/zabbix/zabbix_server.conf
DBPassword=123456
(2)配置zabbix前端php(修改时区时,注意一下php的版本,也可以选择全部修改)
vim /etc/zabbix/apache.conf
<IfModule mod_php5.c>
php_value date.timezone Asia/Shanghai
<IfModule mod_php7.c>
php_value date.timezone Asia/Shanghai
5、重启程序
systemctl restart zabbix-server zabbix-agent apache2
systemctl enable zabbix-server zabbix-agent apache2
6、配置web页面
以下配置项需要全部ok才可以进行下一项
zabbix修改连接的数据库时,前端和服务端都要一起修改,前端修改文件为/etc/zabbix/web/zabbix.conf.php,服务端修改文件为/etc/zabbix/zabbix_server.conf
默认的账户密码是Admin/zabbix
7、页面调试
web界面登录完之后显示的是英文界面,可以修改为中文的,
(1)安装中文包
安装ubuntu系统时,系统包是安装的中文包,所以需要修改ubuntu系统的
apt-get install language-pack-zh*
(2)配置环境变量(下面文件中添加两行配置)
vim /etc/environment
LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN:zh:en_US:en"
(3)重新设置本地配置
dpkg-reconfigure locales
(4)重启服务
systemctl restart zabbix-server zabbix-agent apache2
(5)页面字体显示
可以现在本机电脑上找到字体文件,控制面板中找到字体选项,复制一份字体文件,上传到web端
root@ubuntu20:~# find / -name fonts # 查找文件存放的路径
/usr/share/zabbix/assets/fonts/
vim /usr/share/zabbix/include/defines.inc.php
define('ZBX_GRAPH_FONT_NAME', 'simkai'); // font file name
define('ZBX_FONT_NAME', 'simkai');
三、源码编译
源码编译可以参考官方站点的文档
https://www.zabbix.com/cn/manuals
四、添加主机
1、被监控主机上安装agent程序
apt-get install zabbix-agent
2、修改配置文件
vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.43.108
Hostname=192.168.43.109
3、重启程序
systemctl restart zabbix-agent.service
4、web端配置添加主机
(1)创建主机
(2)添加主机,群组可以新增,也可以选择,客户端监控端口可以默认
(3)模板添加
(4)添加完成,显示绿色表示添加成功
五、测试数据
测试获取zabbix-agent的数据
yum install zabbix-get-4.0.1-1.el7.x86_64.rpm -y
zabbix_get-s 192.168.15.204 -p 10050 -k "system.cpu.load[all,avg1]"
(面)注:
在实际的操作中,有遇到一个问题,agent执行脚本获取到的值和使用zabbix-get获取到的值不一致的情况,例如下面
agent端:脚本是用来检查程序端口和进程是否正常,进程kill掉之后,agent端执行脚本获取值是100,
root@application2:/etc/zabbix/zabbix_agentd.d# bash /etc/zabbix/zabbix_agentd.d/process_port_check.sh process dvs
100
root@application2:/etc/zabbix/zabbix_agentd.d# cat process_port_check.sh
#!/bin/bash
check_process(){
NUM=`ps -ef |grep -v grep |grep -v bash | grep ${NAME} | wc -l`
if [[ $NUM = 0 ]];then
echo 100
else
echo 50
fi
}
check_port(){
ss -tnl | grep ${PORT} &> /dev/null
if [ $-eq 0 ];then
echo 50
else
echo 100
fi
}
main(){
case in
process)
NAME=
check_process;
;;
port)
PORT=
check_port;
;;
esac
}
main
server端:获取数值一直不一致
root@devops:~# zabbix_get -s 10.10.10.32 -p 10050 -k "process_port_check[process,dvs]"
50
开始以为是脚本出现了什么问题,一直修改脚本,但是结果都是一样的,查询网络上的方法都没有适用的,有点怀疑命令是否有问题,将命令修改后,server端出现的返回值提醒了我
修改命令后的脚本
check_process(){
ps -ef |grep -v grep |grep -v bash | grep ${NAME}
if [ $-eq 0 ];then
echo 50
else
echo 100
fi
}
server端执行结果:
root@devops:~# zabbix_get -s 10.10.10.32 -p 10050 -k "process_port_check[process,dvs]"
zabbix 440136 439936 0 10:07 00:00:00 sh -c /etc/zabbix/zabbix_agentd.d/process_port_check.sh process dvs
50
看到server的返回值,发现server端执行脚本使用的环境变量是不一样的,脚本中只是将bash去除了,但是没有去除sh,果断将sh也去除,执行结果正常。
最后一版脚本:
#!/bin/bash
check_process(){
NUM=`ps -ef |grep -wv grep |grep -wv bash |grep -wv sh | grep ${NAME}|wc -l`
if [ $NUM -eq 0 ];then
echo 100
else
echo 50
fi
}
check_port(){
ss -tnl | grep ${PORT} &> /dev/null
if [ $-eq 0 ];then
echo 50
else
echo 100
fi
}
main(){
case in
process)
NAME=
check_process;
;;
port)
PORT=
check_port;
;;
esac
}
main