Zabbix监控主机及资源告警

Posted 水木,年華

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Zabbix监控主机及资源告警相关的知识,希望对你有一定的参考价值。

Zabbix是什么
Zabbix 是一款企业级的分布式开源监控方案。能够监控服务器,网络设备,应用程序等对象。所有的报告、统计信息和配置参数都可以通过Web前端页面访问。

Zabbix功能
https://www.zabbix.com/documentation/3.4/zh/manual/introduction/features
• 数据采集
• 灵活的阈值定义
• 高度可配置化告警
• 实时图表展示
• Web监控
• 丰富的可视化配置
• 历史数据存储
• 网络发现
• Web界面
• Zabbix API
• 权限管理系统
• 易于扩展的Agent
• Web

Zabbix监控范畴
• 硬件 :Zabbix IPMI Interface
• 系统:Zabbix Agent Interface
• Java :Zabbix JMX Interface
• 网络设备:Zabbix SNMP Interface
• 应用服务:Zabbix Agent UserParameter
• URL:Zabbix Web监控

要监控什么

Zabbix常用术语
https://www.zabbix.com/documentation/3.4/zh/manual/definitions
• 主机 (host)
• 主机组 (host group)
• 监控项 (item)
• 触发器 (trigger)
• 事件 (event)
• 异常 (problem)
• 动作 (action)
• 升级 (escalation)
• 媒介 (media)
• 通知 (notification)
• 远程命令 (remote command)
• 模版 (template)
• 应用 (application)
• web 场景 (web scenario)
• 前端 (frontend)
• Zabbix API

Zabbix组件
https://www.zabbix.com/documentation/3.4/zh/manual/concepts


Zabbix常用术语
https://www.zabbix.com/documentation/3.4/zh/manual/definitions
• 主机 (host)
• 主机组 (host group)
• 监控项 (item)
• 触发器 (trigger)
• 事件 (event)
• 异常 (problem)
• 动作 (action)
• 升级 (escalation)
• 媒介 (media)
• 通知 (notification)
• 远程命令 (remote command)
• 模版 (template)
• 应用 (application)
• web 场景 (web scenario)
• 前端 (frontend)
• Zabbix API

Zabbix部署

  1. 安装mysql
    部署MySQL5.7版本。
# yum -y install yum-utils 
# rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm # # # # yum-config-manager --disable mysql80-community
yum-config-manager --enable mysql57-community
# yum install mysql-community-server mysql-community-devel
systemctl start mysqld
systemctl status mysqld
systemctl enable mysqld

重新设置root账号密码:
# grep 'temporary password' /var/log/mysqld.log
# mysql -uroot -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Zabbix@2022';

修改配置文件:
# vi /etc/my.cnf
[mysql]
socket = /tmp/mysql.sock
[mysqld]
user = mysql
port = 3306
datadir = /var/lib/mysql
socket = /tmp/mysql.sock
bind-address = 0.0.0.0
pid-file = /var/run/mysqld/mysqld.pid
character-set-server = utf8
collation-server = utf8_general_ci
log-error = /var/log/mysqld.log

max_connections = 10240
open_files_limit = 65535
innodb_buffer_pool_size = 3G
innodb_flush_log_at_trx_commit = 2
innodb_log_file_size = 256M

# systemctl restart mysqld
  1. 部署nginx
源码编译安装:
# wget http://nginx.org/download/nginx-1.15.3.tar.gz
# yum install gcc pcre-devel openssl-devel –y
# useradd -M -s /sbin/nologin nginx
# tar zxvf nginx-1.15.3.tar.gz
# cd nginx-1.15.3
# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module
# make && make install

修改配置文件,修改pid位置:
# vi /usr/local/nginx/conf/nginx.conf
pid        /var/run/nginx.pid;

配置systemd管理服务:
# vi /usr/lib/systemd/system/nginx.service
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

启动并加入开机启动:
systemctl daemon-reload
systemctl start nginx
systemctl enable nginx
  1. 部署php
# yum install epel-release –y

安装依赖包:
# yum install -y gcc gcc-c++ make gd-devel libxml2-devel \\
libcurl-devel libjpeg-devel libpng-devel openssl-devel \\
libxslt-devel

源码编译安装PHP:
# wget http://docs.php.net/distributions/php-5.6.36.tar.gz
# tar zxf php-5.6.36.tar.gz
# cd php-5.6.36
# ./configure --prefix=/usr/local/php \\
--with-config-file-path=/usr/local/php/etc \\
--enable-fpm --enable-opcache \\
--with-mysql --with-mysqli  \\
--enable-session --with-zlib --with-curl --with-gd \\
--with-jpeg-dir --with-png-dir --with-freetype-dir \\
--enable-mbstring --enable-xmlwriter --enable-xmlreader \\
--enable-xml --enable-sockets --enable-bcmath --with-gettext
# make -j 8 && make install

拷贝配置文件:
cp php.ini-production /usr/local/php/etc/php.ini
cp sapi/fpm/php-fpm.conf /usr/local/php/etc/php-fpm.conf
cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/

配置systemd管理服务:
# vi /usr/lib/systemd/system/php-fpm.service 
[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target

[Service]
Type=simple
PIDFile=/usr/local/php/var/run/php-fpm.pid
ExecStart=/usr/local/php/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target

启动并加入开机启动:
systemctl daemon-reload
systemctl start php-fpm
systemctl enable php-fpm

导入表结构:
mysql> create database zabbix;
mysql> grant all on zabbix.* to zabbix@'%' identified by 'Zabbix@2022';
tar zxvf zabbix-4.0.0.tar.gz
cd zabbix-4.0.0/database/mysql
mysql -uzabbix -p'Zabbix@2022' zabbix < schema.sql
mysql -uzabbix -p'Zabbix@2022' zabbix < images.sql
mysql -uzabbix -p'Zabbix@2022' zabbix < data.sql
  1. 部署Zabbix Server
    安装依赖包:
# yum install libxml2-devel libcurl-devel libevent-devel net-snmp-devel mysql-community-devel -y

源码编译安装zabbix:
# tar -zxf zabbix-4.0.0.tar.gz
# groupadd zabbix
# useradd -g zabbix zabbix -s /sbin/nologin
# cd zabbix-4.0.0
# ./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --enable-java --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2
# make install

修改配置文件:
# vi /usr/local/zabbix/etc/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=Zabbix@2022
DBSocket=/tmp/mysql.sock
配置systemd管理服务:
# vi /usr/lib/systemd/system/zabbix_server.service
[Unit]
Description=Zabbix Server
After=syslog.target
After=network.target

[Service]
Environment="CONFFILE=/usr/local/zabbix/etc/zabbix_server.conf"
EnvironmentFile=-/etc/sysconfig/zabbix-server
Type=forking
Restart=on-failure
PIDFile=/tmp/zabbix_server.pid
KillMode=control-group
ExecStart=/usr/local/zabbix/sbin/zabbix_server -c $CONFFILE
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
TimeoutSec=0

[Install]
WantedBy=multi-user.target

导入表结构:
# cd zabbix-4.0.0/database/mysql
# mysql -uroot –pZabbix@2019
mysql> create database zabbix;
mysql> use mysql;
mysql> source schema.sql;
mysql> source images.sql;
mysql> source data.sql;

启动并加入开机启动:
# systemctl daemon-reload
# systemctl start zabbix-server
# systemctl enable zabbix-server

启动Agent,也监控本机:
# /usr/local/zabbix/sbin/zabbix_agentd


二、监控Linux服务器

  1. 部署Zabbix Agent
    CentOS7.x操作系统安装:
# rpm -ivh http://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.0-2.el7.x86_64.rpm

添加配置文件:

# vi /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
DebugLevel=3
Server=<Zabbix服务器IP>
ListenPort=10050
ListenIP=<当前服务器IP>
ServerActive=<Zabbix服务器IP>
Hostname=<当前服务器IP>
HostMetadata=Linux

启动并加入开机启动:

# systemctl start zabbix-agent
# systemctl enable zabbix-agent
  1. 连通性测试
    在Zabbix服务器执行以下命令,判断是否可以正常连接到Zabbix agent服务器。
/usr/local/zabbix/bin/zabbix_get -s 192.168.80.2 -p 10050 -k "system.uptime"
774564

返回数字说明连通正常。否则可能是被监控机防火墙阻断,无法连通,可以尝试在被监控机添加放行规则:

iptables -I INPUT -s 192.168.80.1 -p tcp --dport 10050 -j ACCEPT
  1. Web页面添加主机
    主机,监控项,触发器和图形

3.1 添加主机

创建应用集

创建监控项

添加图形

创建触发器


查看图形

模板

导入模板

监控项
https://www.zabbix.com/documentation/3.4/zh/manual/config/items/itemtypes
• 监控项格式

• 监控项类型
• Zabbix agent
• SNMP agent
• Simple check
• 用户参数(user parameter) )

UserParameter=<key>,<command>
UserParameter=key[*],command

触发器

https://www.zabbix.com/documentation/3.4/zh/manual/config/triggers/expression
表达式格式:
<server>:<key>.<function>(<parameter>)<operator><constant>
示例1:来自www.zabbix.com主机的最后一次负载值大于5时进入PROBLEM状态
www.zabbix.com:system.cpu.load[all,avg1].last()>5
示例2:在5分钟内CPU iowait平均负载大于20时进入PROBLEM状态
www.zabbix.com:system.cpu.util[,iowait].avg(5m)>20
示例3:当负载大于5或者最近10分钟内负载大于2时进入PROBLEM状态
www.zabbix.com:system.cpu.load[all,avg1].last()>5 or www.zabbix.com:system.cpu.load[all,avg1].min(10m)>2
示例4:当文件/etc/passwd检查的checksum值与最近的值不同时进入PROBLEM状态
www.zabbix.com:vfs.file.cksum[/etc/passwd].diff()=1
示例5:当网卡“eth0”在5分钟内接收的字节大于100KB时进入PROBLEM状态
www.zabbix.com:net.if.in[eth0,bytes].min(5m)>100K
示例6:在30分钟内超过5次不可达时进入PROBLEM状态
zabbix.zabbix.com:icmpping.count(30m,0)>5
示例7:在5分钟内未收到数据进入PROBLEM状态
zabbix.zabbix.com:agent.ping.nodata(5m)=1

告警
动作(Action)

根据支持的事件源定义操作:
 触发事件 - 当trigger的状态从OK 转到 PROBLEM 或者转回时
 发现事件 - 发生网络发现时
 自动注册事件 - 当新的活动代理自动注册
 内部事件 - 当项目不受支持或触发器进入未知状态

邮件
更改报警媒介类型

创建动作

创建操作

告警主机:HOSTNAME1
告警时间:EVENT.DATE EVENT.TIME
告警等级:TRIGGER.SEVERITY
告警信息:TRIGGER.NAME
告警项目:TRIGGER.KEY1
问题详情:ITEM.NAME:ITEM.VALUE
当前状态:TRIGGER.STATUS:ITEM.VALUE1
事件ID:EVENT.ID

设置报警媒介

更改触发器,触发条件

测试邮件已经发送

自定义脚本告警

# yum install mailx
# vi /etc/mail.rc     #添加邮件信息
set from=xxxxxx@163.com smtp=smtp.163.com
set smtp-auth-user=baojingtongzhi@163.com smtp-auth-password=xxxxx #授权码
set smtp-auth=login
# echo "this is test mail." |mail -s "test mail" xxx@163.com
告警脚本:
# cat /usr/local/zabbix/share/zabbix/alertscripts/sendmail.sh
#!/bin/bash
to=$1
subject=$2
body=$3
FILE=/tmp/mail.tmp
echo "$body" > $FILE
dos2unix -k $FILE     # 解决正文变成附件.bin
mail -s "$subject" "$to" < $FILE

创建媒介类型

用户指定媒介类型

更改属主,属组测试

chown zabbix.zabbix  /usr/local/zabbix/share/zabbix/alertscripts/sendmail.sh

钉钉告警

钉钉添加机器人,执行如下脚本

 cat dingding.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests
import json
import sys
import os

headers = 'Content-Type': 'application/json;charset=utf-8'
api_url = "https://oapi.dingtalk.com/roboXXXXXXXXXXXXXXXXX"  #钉钉机器人Webhook地址

def msg(text):
    json_text= 
     "msgtype": "text",
     "text": 
         "content": text
     ,
     "at": 
         "atMobiles": [
             "186..."
         ],
         "isAtAll": False
     
    
    print requests.post(api_url,json.dumps(json_text),headers=headers).content

if __name__ == '__main__':
    text = sys.argv[1]
    msg(text)

创建媒介类型

用户指定媒介类型

测试

以上是关于Zabbix监控主机及资源告警的主要内容,如果未能解决你的问题,请参考以下文章

Zabbix监控主机及资源告警

zabbix监控流程

zabbix-3.0.18 邮件告警

Zabbix:server,agent端 安装配置及主机,监控项,触发器,动作,媒介配置步骤

37-Zabbix自定义监控模板及告警设置

Linux----------zabbix监控-微信钉钉告警