ZABBIX-实战项目

为什么要监控

监控是整个运维乃至整个产品生命周期中重要的一环,事前及时预警发现故障,事后提供详实的数据用于追查定位问题。

对系统不间断实时监控
实时反馈系统当前状态
保证服务可靠性安全性
保证业务持续稳定运⾏

企业常见监控工具

cacti:擅长出图,添加监控项很繁琐
nagios:可以添加监控项,但不可图形化
ganglia:分布式集群监控系统,适合于对上千台大型规模集群进行监控,性能成本比较低,批量管理更加方便,但不支持告警。
zabbix:基于web,提供分布式方式监控网络和系统参数,出图美观,支持告警
promethus:适合于监控k8s
ELK:日志监控

zabbix工作原理

Agentd安装在被监控的主机上,Agent负责定期收集客户端本地各项数据,并发送至Zabbix Server端,Zabbix Server收到数据,将数据存储到数据库中,用户基于Zabbix WEB可以看到数据在前端展现图像。
 当Zabbix监控某个具体的项目,该项目会设置一个触发器阈值,当被监控的指标超过该触发器设定的阈值,会进行一些必要的动作,动作包括:发送信息(邮件、微信、短信)、发送命令(SHELL 命令、Reboot、Restart、Install等)

1.硬件监控 路由器、交换机、防⽕墙、服务器
2.系统监控 Windows/Linux CPU、内存、磁盘、⽹络、进程、TCP
3.服务监控 nginx、php、tomcat、redis、memcache、mysql
4.WEB监控 请求时间、响应时间、加载时间、
5.⽇志监控 ELk(收集、存储、分析、展示) ⽇志易、阿里云日志系统
6.安全监控 Firewalld(限制来源的ip)、WAF(Nginx+lua)、安全宝、⽜盾云、安全狗
7.⽹络监控 smokeping 多机房、监控宝、全国各地实时延迟
8.业务监控 活动引⼊多少流量、产⽣多少注册量、带来多⼤价值

安装部署环境

安装部署服务端

1.关闭防火墙和禁用selinux

systemctl stop firewalld
systemctl disable firewalld
sed -i "s/SELINUX=.*/SELINUX=Disabled/" /etc/selinux/config
setenforce 0

或者放行相关端口:

firewall-cmd --permanent --zone=public --add-port=10050/tcp
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --permanent --zone=public --add-port=10051/tcp
firewall-cmd --reload

2.安装zabbix5.0的rpm源
官方源地址:

repo.zabbix.com
rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' /etc/yum.repos.d/zabbix.repo
yum clean all

3.安装软件包
安装 zabbix server 和 agent

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

安装 Software Collections,便于后续安装高版本的 php,默认 yum 安装的 php 版本为 5.4 过低

yum install centos-release-scl -y

启用 zabbix 前端源,修改vi /etc/yum.repos.d/zabbix.repo,将[zabbix-frontend]下的 enabled 改为 1

[zabbix-frontend]
...
enabled=1
...

安装 zabbix 前端和相关环境

yum install zabbix-web-mysql-scl zabbix-nginx-conf-scl -y

数据库安装
1.安装mariadb数据库

yum install mariadb-server -y
systemctl enable --now mariadb

mariadb设置root密码

mysqladmin -uroot password admin

使用 root 用户进入 mysql,并建立 zabbix 数据库,注意数据库编码

create database zabbix character set utf8 collate utf8_bin;
create user zabbix@localhost identified by 'zabbix';
grant all privileges on zabbix.* to zabbix@localhost;

##create user zabbix@localhost identified by 'zabbix'; 如果连不上数据库可以加上这两行
##grant all privileges on zabbix.* to zabbix@'%';
quit;

导入初始架构和数据,zabbix 数据库用户为 zabbix,密码为 zabbix

zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix

导入成功,如下图:

配置zabbix server数据库连接:
修改 zabbix server 配置文件vi /etc/zabbix/zabbix_server.conf 里的数据库密码

vi /etc/zabbix/zabbix_server.conf 
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix

配置zabbix前端php-fpm:
编辑配置文件 vi /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf, add nginx to listen.acl_users directive.

listen.acl_users = apache,nginx
php_value[date.timezone] = Asia/Shanghai

Nginx端配置
nginx配置1:
编辑配置文件 vi /etc/opt/rh/rh-nginx116/nginx/conf.d/zabbix.conf, uncomment and set 'listen' and 'server_name' directives.

# listen 80;
# server_name localhost;

nginx配置2:

注释listen,server_name,root等默认配置
vim /etc/opt/rh/rh-nginx116/nginx/nginx.conf
    server {
#        listen       80 default_server;
#        listen       [::]:80 default_server;
#        server_name  _;
#        root         /opt/rh/rh-nginx116/root/usr/share/nginx/html;

#        Load configuration files for the default server block.
#        include      /etc/opt/rh/rh-nginx116/nginx/default.d/*.conf;

启动相关服务,并配置开机自动启动

systemctl start zabbix-server rh-php72-php-fpm rh-nginx116-nginx

systemctl enable zabbix-server rh-php72-php-fpm rh-nginx116-nginx

使用浏览器访问http://ip/zabbix 即可访问 zabbix 的 web 页面

默认登陆账号密码:Admin---zabbix

安装部署zabbix-agent2

zabbix-agent2作为一款新的agent,未来可能会替代原有的agent
特性:

降低了TCP连接数量,也就是降低了资源消耗
用go语言开发,集成了zabbix-agent原有功能,并且易于通过插件扩展第三方功能

1)配置yum源

rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm

2)安装zabbix-agent2:

yum install -y zabbix-agent2
rpm -ql zabbix-agent2 //查看相关文件
egrep -v '^#|^$' /etc/zabbix/zabbix_agent2.conf //查看配置文件

3)配置 Zabbix-Agent 指向 Zabbix-Server

[root@m02 ~]# vim /etc/zabbix/zabbix_agent2.conf
Server=192.168.198.128

4)启动 Zabbix-Agent , 默认监听在 10050 端⼝

[root@m02 ~]# systemctl start zabbix-agent2
[root@m02 ~]# systemctl enable zabbix-agent2
[root@m02 ~]# netstat -lntp

zabbix添加监控主机

web界面介绍:
主机-->监控项-->模板-->触发器-->执行动作-->告警媒介

1)配置ZabbixWeb⻚⾯,点击配置->选择主机->创建主机


zabbix添加监控项

有时候server端中自带的模板没有提供我们所需要的监控项,就需要我们手动进行添加监控项
客户端自定义监控取值-->服务端web获取监控项键值
1)简单的自定义监控配置(单一服务状态)
原理:
编辑客户端配置文件,新增UserParameter=,

举例:监控nginx服务是否启动(ps -ef |grep -c [n]ginx)

方式一,直接修改/etc/zabbix/zabbix_agent.conf配置文件参数:

vim /etc/zabbix/zabbix_agent2.conf
UserParameter=web_state,ps -ef |grep -c [n]ginx

方式二:在/etc/zabbix/zabbix_agent2.d/目录下编写自定义监控文件

vim web_server.conf
## UserParameter=键(变量名),值(变量信息)
UserParameter=web_state,ps -ef|grep -c [n]ginx

重启服务:
systemctl restart zabbix-agent2

在服务端中测试:

yum install -y zabbix-get
zabbix_get -s 192.168.81.162 -k 'web_state'  

WEB配置:
创建监控项

配置---主机---选择设置监控项的主机---进入【监控项】---【创建监控项】

监控项页面配置:

名称:设置监控项名称web_server_status→ 键值:设置定义好的监控项web_state→ 信息类型:指定监控输出信息字符类型
→ 单位:指定输出内容单位信息→ 更新间隔时间:默认30s→ 创建新的应用集:server-status(将新的监控项添加到新的应用集中)

检查是否收集到监控信息:

监测→ 最新数据→ 应用集:筛选server_status

2)复杂的自定义监控配置(多个服务状态)

监控一台主机上的多个服务的状态,比如nginx,ssh,mysql等等多个服务的状态信息,我们可以在在/etc/zabbix/zabbix_agent2.d/目录下定义多个服务配置文件,当然,这样比较麻烦,我们可以通过以下方法简化配置:在/etc/zabbix/zabbix_agent2.d/下,定义一个传参的配置文件,然后在WEB中,分别配置不同服务的监控项,这样就节约了agent端配置多个配置文件的时间。

举例:
将上面实验1中的web_server.conf 改名为server_state.conf

# cd /etc/zabbix/zabbix_agentd.d/
# mv web_server.conf server_state.conf
# vim server_state.conf
UserParameter=server_state[*],ps -ef|grep -c $1

在zabbix-server命令测试
zabbix_get  -s 172.16.1.7 -k 'server_state[ssh]'

在WEB中新建不同的监控项
以监控ssh服务状态为例:

查看监测结果:


同理可以定义其它服务如:nginx,mysqld等等监控项

zabbix添加告警

1)页面报警

创建触发器(配置---主机---选择相应监控主机触发器---创建触发器)
设置表达式:
#{监控主机名称:键值名称.调用的表达式函数}<=2
{m02:server_state[nginx].last()}<=2
参数说明:
last()       收集到最新信息(数值)  *****
max()      在一定周期内,收集到的最大值
min()       在一定周期内,收集到的最小值
diff()        在一定时间内,判断收集的信息是否不同
change() 在一定时间内,判断收集的信息是否不同
avg()       取一段时间的平均值

至此: 已经看到提示报警

2)邮件告警

实验nginx挂了将告警信息发送到邮箱

添加报警媒介,类型为Email,这里查了很多博客,全是以mailx为主的,需要配置脚本,其实我觉得直接用zabbix自己的email就可以,以163邮箱为例,先在web界面上创建一个email报警媒介,


发送测试邮件

假设nginx服务停止了,我们要通过配置里面的动作选项,经过动作里面的设置,让指定用户通过报警媒介发送邮件给指定负责人,刚刚配置好了报警媒介,现在配置动作:
可以将通过不同的分组将不同级别的报警进行分组发送,通过操作步骤将报警升级:比如,1h内责任人未进行报警处理,那么就自动进行第二步操作将告警发送给上级领导

配置 操作:

故障{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}

现在配置好了动作,最后需要配置指定用户发送邮件给负责人,指定用户在动作选项已经选择超级管理员Admin,现在选择user setting配置

3)钉钉告警

实验nginx挂了将告警信息发送到钉钉
先添加钉钉机器人, 将Webhook复制,填写到下面脚本中

还需设置安全设置,我这只把zabbix-server地址填进去,这样就禁止其他IP使用webhook

配置钉钉机器人脚本,钉钉Webhook代码:

vim /usr/lib/zabbix/alertscripts/dingding.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests,json,sys,os

headers = {'Content-Type': 'application/json;charset=utf-8'}
api_url = "webhook地址"
def msg(text):
    json_text= {
     "msgtype": "text",
     "text": {
         "content": text
     },
     "at": {
         "atMobiles": [
             "186..." #需要@群里谁
         ],
         "isAtAll": True #是否全部@,True为是,False为否
     }
    }
    print requests.post(api_url,json.dumps(json_text),headers=headers).content

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

在zabbix-server的配置文件找到 ,进入对应的文件目录/usr/lib/zabbix/alertscripts,这里是存放zabbix脚本的地方,web端可以通过执行此目录修下的脚本,将脚本内容copy到dingding.py,给他执行权限  chmod +x dingding.py
记住脚本放置位置:

AlertScriptsPath=/usr/lib/zabbix/alertscripts

测试钉钉脚本:

钉钉信息:

配置报警媒介
在web端配置钉钉脚本媒介

脚本参数:https://www.dell.com/zh-cn

{ALERT.MESSAGE}
配置动作
接下来就是配置动作,和邮件一样,只需要更改报警媒介为创建好的“钉钉报警”,最后添加User setting中的报警媒介,和之前一样,在添加一个钉钉报警的

配置用户
配置用户Admin发送邮件:

测试\

4)企业微信告警

https://www.jianshu.com/p/ad72ca92120d

分布式监控:

分布式监控的作用
分担server的集中式压力 Agent > proxy >server
解决多机房之间的网络延时问题 上海 > proxy > server

监控vCenter

https://www.bilibili.com/read/cv11668253

posted @ 2022-03-02 17:20  michaelni  阅读(1783)  评论(0编辑  收藏  举报