Zabbix入门文章

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 文末有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
------------------------------------------------------------
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
7月前
|
监控 关系型数据库 MySQL
Alibaba Cloud Linux基础入门(1)——配置zabbix
该文档是关于在Alibaba Cloud Linux上配置Zabbix的教程。首先,通过添加Zabbix仓库并安装相关软件包(如zabbix-server,web前端和agent)。然后,安装并启动MySQL数据库,执行`mysql_secure_installation`进行配置。接着,创建名为zabbix的数据库和用户,并导入Zabbix默认数据。最后,设置Zabbix服务开机自启动,并通过浏览器访问http://服务器IP/zabbix完成Web端配置,使用Admin/zabbix登录。
WGCLOUD v3.4.3从入门到精通(zabbix使用详解) 监测FTP和SFTP教程
我们在左侧菜单点击【FTP/SFTP监测】,可以看到如下列表
WGCLOUD v3.4.3从入门到精通(zabbix使用详解) 监测FTP和SFTP教程
|
存储 监控 网络协议
Zabbix API初步入门
Zabbix API是实现Zabbix自动化监控的主要手段之一,你可以使用Zabbix Agent的自动注册功能,也可以使用网络自动发现功能,但是这些功能各有各的缺点。如果编写脚本对你来说没有压力,我跟建议Zabbix的所有自动化功能全部使用API的方式来完成。
1148 0
Zabbix API初步入门
|
Web App开发 监控 关系型数据库
|
监控 数据库 数据安全/隐私保护
|
Web App开发 监控 PHP
|
23天前
|
监控 Java Shell
监控堆外第三方监控工具Zabbix
监控堆外第三方监控工具Zabbix
33 5
|
20天前
|
监控 安全 前端开发
使用 Zabbix 监控堆外应用
使用 Zabbix 监控堆外应用
37 9

推荐镜像

更多
下一篇
DataWorks