一叶知秋.

业精于勤,荒于嬉;行成于思,毁于随。

Zabbix入门

1.Zabbix简介

组件说明

基于web界面 采用B/S架构

提供分布式系统监控和网络监视功能

企业级开源解决方案

核心组件:

  • Zabbix Server
  • Zabbix Agent

进程构成

Zabbix安装完成后会产生五个程序:
zabbix_agentd、zabbix_get、zabbix_sender、zabbix_server、zabbix_proxy


zabbix_agentd   #客户端守护进程,收集客户端数据;例如:CPU负载、内存、硬盘等使用情况

zabbix_get		#zabbix工具,单独使用的命令,通常用于排错

zabbix_sender	#在脚本完成后主动提交数据,发送数据给server或proxy

zabbix_server	#zabbix服务端守护进程,所有的数据都是被提交或主动提交到zabbix_server端

zabbix_proxy	#代理守护进程,功能类似为server,唯一不同的是他只是一个中转站
zabbix_java_gaetway   #java网关,只用于java方面,需要另外安装

硬件需求

3.2构建zabbix监控服务器

1.初始化系统设置

# 关闭防火墙
# 关闭selinux
[root@201 ~]# systemctl stop firewalld
[root@201 ~]# systemctl disable firewalld
[root@201 ~]# getenforce 
Disabled

2.安装LAMP环境,采用mariadb数据库

wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
yum clean all
yum makecache
yum -y install mariadb mariadb-server httpd php php-mysql 

systemctl enable httpd
systemctl restart httpd
systemctl enable mariadb
systemctl restart mariadb
# 初始化mariadb
mysql_secure_installation

3.安装zabbix程序

cat <<EOF > /etc/yum.repos.d/zabbix.repo
[zabbix]
name=Zabbix Official Repository - \$basearch
baseurl=https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/\$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
 
[zabbix-non-supported]
name=Zabbix Official Repository non-supported - \$basearch
baseurl=https://mirrors.aliyun.com/zabbix/non-supported/rhel/7/\$basearch/
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
gpgcheck=1
EOF
# 添加gpgkey
curl https://mirrors.aliyun.com/zabbix/RPM-GPG-KEY-ZABBIX-A14FE591 \
-o /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
 
curl https://mirrors.aliyun.com/zabbix/RPM-GPG-KEY-ZABBIX \
-o /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX


yum -y install zabbix-server-mysql zabbix-web-mysql  zabbix-agent

# 初始化数据库
mysql -u root -p
CREATE DATABASE zabbix DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';  

# 写入数据库
cd /usr/share/doc/zabbix-server-mysql-3.2.1
zcat create.sql.gz | mysql -uroot -p  zabbix 

# 启动zabbix服务
vim /etc/zabbix/zabbix_server.conf
	DBHost=127.0.0.1
	DBName=zabbix
	DBUser=zabbix
	DBPassword=zabbix
	
systemctl start zabbix-server
systemctl enable zabbix-server

# 配置zabbix前端php
vim /etc/httpd/conf.d/zabbix.conf 
    php_value date.timezone Asia/Shanghai # 取消注释,修改为亚洲
    
# 配置时间同步,生产环境中应有一台ntp服务器,集群内的时间同步到ntp服务器上
yum -y install ntpdate 
ntpdate cn.pool.ntp.org

# 配置httpd,重启httpd,访问网页安装
vim /etc/httpd/conf/httpd/conf
	DocumentRoot "/usr/share/zabbix/"

访问zabbix服务器的IP

新建简单的监控主机

[root@201 /usr/share/zabbix]# systemctl start zabbix-agent
[root@201 /usr/share/zabbix]# systemctl enable zabbix-agent

中文情况下,会出现字符乱码情况

解决办法:

# 在windows下 Win+R 快捷键 --> fonts --> 拷贝宋体到服务器
# 的/usr/share/zabbix/assets/fonts 目录下
cd /usr/share/zabbix/assets/fonts
mv simsun.ttc song.ttf
chmod a+x song.ttf 

# 编辑zabbix php页面的配置文件,将graphfont改为song
vim /usr/share/zabbix/include/defines.inc.php 
define('ZBX_GRAPH_FONT_NAME','song'); 

验证:

3.3添加监控主机----自动发现

自动发现的应用场景:
企业批量添加主机时,传统的添加耗时耗力

自动发现规则有主机发起,zabbix server开启发现进程,定时扫描局域网中IP服务、设备,实现自动发现主机、将主机添加到主机组、加载模板、创建图像等。

创建自动发现步骤

配置 ---> 动作 ---> 创建动作 ---> 自动发现 ---> 创建发现规则

添加客户端验证自动发现规则是否生效

yum -y install zabbix-agent

vim /etc/zabbix/zabbix_agentd.conf 
Server=10.0.0.201		#zabbix-server服务端IP
ServerActive=10.0.0.20	#zabbix-server服务端IP
Hostname=10.0.0.20		#本机名字随意

# 开启服务
service zabbix-agent start

# 开启httpd服务 
service httpd start

3.4Nginx并发监控

# 安装nginx
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
# 利用nginx自带的状态统计功能
`--with-http_stub_status_module`
# 编辑nginx主配置文件,增加状态统计页面
location /nginx_status{
      stub_status on;
       access_log ogg;
}

1.编写nginx监控脚本,在被监控端

#!/bin/bash

HOST="127.0.0.1"
PORT="80"

# 检测nginx进程
function ping {
    /sbin/pidof nginx | wc -l
}
# 检测nginx性能
function active {
    /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
}
function reading {
    /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
}
function writing {
    /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
}
function waiting {
    /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
}
function accepts {
    /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null|awk NR==3 | awk '{print $1}'
}
function handled {
    /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null|awk NR==3 | awk '{print $2}'
}
function requests {
    /usr/bin/curl "http://$HOST:$PORT/nginx_status/" 2>/dev/null|awk NR==3 | awk '{print $3}'
}
# 执行function
$1

2.将自定义的userparameter加入配置文件,然后重启agent

vim /etc/zabbix/zabbix_agentd.conf
UserParameter=nginx.status[*],/server/scripts/nginx-status.sh $1

systemctl restart zabbix-agent

3.server端安装zabbix-get,获取数据

# zabbix_get -s 10.0.0.202 -k 'nginx.status[accepts]'
63
# zabbix_get -s 10.0.0.202 -k 'nginx.status[ping]'
1

4.导入监控模板,在主机中添加模板

3.5钉钉告警

1.钉钉群组内添加自定义机器人

复制生成的webhook

https://oapi.dingtalk.com/robot/send?access_token=cdf07f8b3cb0daa2ee7e9a1cd5dc8487a0233cebe41367c0ebf6821fa2f2c066

2.编写py脚本,修改webhook为自己生成的

#!/usr/bin/env python
#coding:utf-8
#日志文件:/var/log/dingding.log
import requests,json,sys,os,datetime
webhook="https://oapi.dingtalk.com/robot/send?access_token=cdf07f8b3cb0daa2ee7e9a1cd5dc8487a0233cebe41367c0ebf6821fa2f2c066"      
user=sys.argv[1]
text=sys.argv[3]
data={
    "msgtype": "text",
    "text": {
        "content": text
    },
    "at": {
        "atMobiles": [
            user
        ],
        "isAtAll": False
    }
}
headers = {'Content-Type': 'application/json'}
x=requests.post(url=webhook,data=json.dumps(data),headers=headers)
if os.path.exists("/var/log/dingding.log"):
    f=open("/var/log/dingding.log","a+")
else:
    f=open("/var/log/dingding.log","w+")
f.write("\n"+"--"*30)
if x.json()["errcode"] == 0:
    f.write("\n"+str(datetime.datetime.now())+"    "+str(user)+"    "+"发送成功"+"\n"+str(text))
    f.close()
else:
    f.write("\n"+str(datetime.datetime.now()) + "    " + str(user) + "    " + "发送失败" + "\n" + str(text))
    f.close()

3.添加执行权限,测试:

chmod +x token.py
./token.py test test "告警"

注意事项

该脚本需要python2.6.6以上版本,且具有requests模块

否则会报错:

[root@201 ~]# ./token.py 1 2 告警
Traceback (most recent call last):
  File "./token.py", line 4, in <module>
    import requests,json,sys,os,datetime
ImportError: No module named requests

解决办法:

yum -y install epel-release
yum -y install python-pip
pip install requests

4.将脚本放到指定目录下

# cat /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts

[root@201 /usr/lib/zabbix/alertscripts]# mv /root/token.py .

5.zabbix web界面配置

创建报警媒介

参数为:

{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}

用户添加报警媒介,点击admin用户


收件人为钉钉群内成员的手机号

添加动作:

错误报警信息参数

# 标题:
故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
# 消息内容:
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件 ID:{EVENT.ID}

错误恢复报警信息参数:

# 标题:
恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!
# 消息内容:
告警主机:{HOSTNAME1}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件 ID:{EVENT.ID}

模拟nginx主机宕机,查看钉钉消息:

查看日志:

------------------------------------------------------------
2020-09-13 09:22:21.747544    18365707729    发送成功
告警主机:10.0.0.202
告警时间:2020.09.13 09:22:18
告警等级:High
告警信息: nginx was down!
告警项目:nginx.status[ping]
问题详情:nginx status PING:Down (0)
当前状态:PROBLEM:Down (0)
事件 ID:110
------------------------------------------------------------
posted @ 2020-11-11 11:42  ccku  阅读(209)  评论(0编辑  收藏  举报