第一章 监控知识基本概述

1.1 为什么要使用监控

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

1.2 如何进行监控,比如我们需要监控磁盘的使用率

1.如何查看磁盘使用率 df -h
2.监控磁盘的那些指标 block、 inode
3.如何获取具体的信息 df -h|awk ‘//(NF-1)’
4.获取的数值到达多少报警 80%

1.3 流行的监控工具

1.Zabbix
2.Lepus(天兔)数据库监控系统
3.Open-Falcon 小米开源监控系统
4.Prometheus(普罗米修斯, Docker、 K8s)

1.4 如果去到一家新公司,如何入手监控

1.硬件监控 路由器、交换机、防火墙
2.系统监控 CPU、内存、磁盘、网络、进程、 TCP
3.服务监控 nginx、 php、 tomcat、 redis、 memcache、 mysql
4.WEB监控 请求时间、响应时间、加载时间
5.日志监控 ELk(收集、存储、分析、展示) 日志易
6.安全监控 Firewalld、 WAF(Nginx+lua)、安全宝、牛盾云、安全狗
7.网络监控 smokeping 多机房
8.业务监控 活动引入多少流量、产生多少注册量、带来多大价值

第二章 单机时代如何监控

2.1 传统监控相关命令

CPU 监控命令: w、 top、 htop、 glances

 %Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
us 用户态: 跟用户的操作有关 %
sy 系统态: 跟内核的处理有关 %
id CPU 空闲:

内存监控命令: free

 [root@m01 ~]# free -h
total used free shared buff/cache available
Mem: 977M 105M 724M 6.6M 148M 729M
Swap: .0G 0B .0G

磁盘监控命令: df、 iotop

 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 0.80 25.32 33.36
设备名 每秒传输次数 每秒读大小 每秒写大小 读的总大小 写的总大小

网络监控命令: ifconfig、 route、 glances、 iftop、 nethogs、 netstat

 单位换算
Mbps 100Mbps/
MB 12MB
iftop 中间的<= =>这两个左右箭头,表示的是流量的方向。
TX:发送流量、 RX:接收流量、 TOTAL:总流量
#查看 TCP11 中状态
netstat -an|grep ESTABLISHED
netstat -rn # 查看路由信息
netstat -lntup

2.2 传统监控痛点

随着时间的推移,用户不断的增多,服务随时可能扛不住会被 oom(out of memory),当系统内存不足的时候,就会触发 oom
1.当系统内存不足的时候就会大量使用 swap
2.当系统大量使用 swap 的时候,系统会特别卡
注意: 有时可能内存还有剩余 300Mb-500Mb,但会发现 swap 依然被使用

2.3 使用Shell脚本监控

那单机时代,如何使用 shell 脚本来实现服务器的监控
需求: 每隔 1 分钟监控一次内存,当你的可用内存低于 100m,发邮件报警,要求显示剩余内存
1.怎么获取内存可用的值 free -m|awk ‘/^Mem/{print $NF}’
2.获取到内存可用的值如何和设定的阈值进行比较
3.比较如果大于 100m 则不处理,如果小于 100 则报警
4.如何每隔 1 分钟执行一次

  [root@ZabbixServer ~]# cat free.sh
#!/usr/bin/bash
HostName=$(hostname)_$(hostname -i)
Date=$(date +%F)
while true;do
Free=$(free -m|awk '/^Mem/{print $NF}')
if [ $Free -le ];then
echo "$Date: $HostName Mem Is < ${Free}MB"
fi
sleep
done

shell脚本监控

第三章 zabbix 监控快速安装

2.1 安装mariadb

2.1.1 安装官方最新版mariadb

由于官网的MariaDB版本要比阿里云的版本要高,所以我们应该优先使用官方的版本

  .首先在RHEL/CentOS和Fedora操作系统中添加MariaDB的yum配置文件MariaDB.repo文件。
# 编辑创建mariadb.repo仓库文件
vim /etc/yum.repos.d/MariaDB.repo .添加repo仓库配置
[mariadb]
name=MariaDB
baseurl=http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck= .当 MariaDB 仓库地址添加好后,你可以通过下面的一行命令轻松安装 MariaDB。
yum install MariaDB-server MariaDB-client -y

安装最新mariadb

2.1.2 使用阿里云源安装Mariadb
 # 如果官方的下载网速太慢,我们就使用阿里云低版本的mariadb数据库
.删除或者重命名刚才创建的Mariadb.repo文件
cd /etc/yum.repos.d
mv Mariadb.repo Mariadb.repo.bak .配置阿里云源
参考链接: https://developer.aliyun.com/mirror .一条命令安装Mariadb
yum install mariadb-server mariadb -y
2.1.3 安装好了之后,使用systemctl进行mariadb服务管理
 systemctl start mariadb  #启动MariaDB
systemctl stop mariadb #停止MariaDB
systemctl restart mariadb #重启MariaDB
systemctl enable mariadb #设置开机启动
2.1.4 初始化mariadb
 mysql_secure_installation
 --为root用户设置密码
--删除匿名账号
--取消root用户远程登录
--删除test库和对test库的访问权限
--刷新授权表使修改生效
[root@localhost ~]# mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MySQL to secure it, we'll need the current
password for the root user. If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):<–初次运行直接回车
OK, successfully used password, moving on…
Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.
Set root password? [Y/n] #是否设置root用户密码,输入y并回车或直接回车
New password: #设置root用户的密码
Re-enter new password: #再输入一次你设置的密码
Password updated successfully!
Reloading privilege tables..
… Success!
By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] #是否删除匿名用户,生产环境建议删除,所以直接回车
… Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] #是否禁止root远程登录,根据自己的需求选择Y/n并回车,建议禁止
… Success!
By default, MySQL comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] #是否删除test数据库,直接回车
- Dropping test database…
… Success!
- Removing privileges on test database…
… Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] #是否重新加载权限表,直接回车
… Success!
Cleaning up…
All done! If you've completed all of the above steps, your MySQL
installation should now be secure.
Thanks for using MySQL!
[root@localhost ~]#

运行mysql_secure_installation会执行几个设置

2.1.5 优先解决中文无法正常显示的问题
 .停掉mariadb服务
systemctl stop mariadb
修改配置文件vim /etc/my.cnf
 [mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
log-error=/var/log/mysqld.log
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

写入到/etc/my.cnf中

2.2 配置zabbix仓库

 [root@m01 ~]# rpm -Uvh https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm
[root@m01 ~]# yum clean all
[root@m01 ~]# yum makecache fast

2.3 安装 Zabbix 程序包,以及 MySQL、前端、代理

 [root@m01 ~]# yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-agent

注意:nginx软件包在官方存储库中不可用。可以在epel资料库中找到。

 yum -y install epel-release

2.4 创建 Zabbix 数据库以及用户

 [root@m01 ~]# mysql -uroot -predhat
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
MariaDB [(none)]> flush privileges;

创建Zabbix数据库以及用户

2.5 导入 Zabbix 数据至数据库中

 [root@m01 ~]# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix

2.6 配置Zabbix服务器数据库

编辑/etc/zabbix/zabbix_server.conf 文件,修改数据库配置

 [root@m01 ~]# cat /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix

配置Zabbix服务器数据库

2.7 为zabbix前端配置PHP

编辑文件/etc/nginx/conf.d/zabbix.conf,取消注释并设置’listen’和’server_name’指令。

 listen ;
server_name 10.0.0.9;

编辑文件/etc/php-fpm.d/zabbix.conf,取消注释并设置正确的时区。

 php_value[date.timezone] = Asia/Shanghai

2.8 启动 Zabbix 服务进程,并加入开机自启动

 [root@m01 ~]# systemctl restart zabbix-server zabbix-agent nginx php-fpm
[root@m01 ~]# systemctl enable zabbix-server zabbix-agent nginx php-fpm

第四章 WEB安装步骤

4.1浏览器打开地址:http://10.0.0.9/setup.php

4.2 检查依赖项是否存在异常

4.3 配置zabbix连接数据库

4.4 配置 ZabbixServer 服务器的信息

4.5 最终确认检查

4.6 安装成功

提示已成功地安装了 Zabbix 前端。配置文件/etc/zabbix/web/zabbix.conf.php 被创建。

4.7 登陆zabbix

默认登陆 ZabbixWeb 的用户名 Admin,密码 zabbix

4.8 调整字符集为中文

查看仪表盘

4.9 修复中文乱码

打开图形之后会发现语言为乱码,原因是缺少字体

解决方法:安装字体并替换现有字体

 [root@m01 ~]# yum install wqy-microhei-fonts -y
[root@m01 ~]# cp /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/zabbix/http://images.lxh1.com/zabbix/fonts/graphfont.ttf
 解决方法:用Windows的字体替换现有字体
.从Windows控制面板->字体->选择一种中文简体->复制粘贴到某个文件中
.找到服务器上面zabbix的字体文件夹
find / -name fonts
cd /usr/share/zabbix/assets/fonts/
# 查看原有字体(graphfont.ttf),并改名
ls
mv graphfont.ttf graphfont.ttf.bk
# 利用Xshell将windows中拷贝的字体粘贴进去
.将defines.inc.php里面的原有字体替换成现在的
find / -name defines.inc.php
vim /usr/share/zabbix/include/defines.inc.php
(vim使用命令行编辑模式,全局替换字体)
:%s/graphfont/simhei/g
.刷新网页,字体就正常显示了
如果没有中文显示就给simhei添加权限 chmod simhei.ttf

方法2从windows电脑传过来

再次刷新发现已经变成中文了

第五章 Zabbix 监控基础架构

zabbix-agent(数据采集)—>zabbix-server(数据分析|报警)—> 数据库(数据存储)—>zabbix web(数据展示)

第六章 zabbix 快速监控主机

6.1安装zabbix-agent

 [root@web01 ~]# rpm -ivh https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/4.4/rhel/7/x86_64/zabbix-agent-4.4.1-1.el7.x86_64.rpm

6.2配置zabbix-agent

 [root@web01 ~]# cat /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=
Server=10.0.0.9
ServerActive=127.0.0.1
Hostname=Zabbix server
Include=/etc/zabbix/zabbix_agentd.d/*.conf

配置zabbix-agent

6.3 启动zabbix-agent并检查

 [root@web01 ~]# systemctl start zabbix-agent.service
[root@web01 ~]# systemctl enable zabbix-agent.service
[root@web01 ~]# netstat - tunlp | grep

启动zabbix-agent并检查

6.4 zabbix-web界面,添加主机

点击创建主机, 填写以下主机信息

再点击并选择模板

第七章 自定义监控主机小试身手

7.1 监控需求

监控TCP11种状态集

7.2 命令行实现

 [root@web01 ~]# netstat -ant | grep -c TIME_WAIT

 [root@web01 ~]# netstat -ant | grep -c LISTEN
 

7.3 编写zabbix监控文件(传参形式)

 [root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/tcp_status.conf

[root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
UserParameter=tcp_state[*],netstat -ant|grep -c $
UserParameter=TIME_WAIT,netstat -ant|grep -c TIME_WAIT
root@web01 ~]# systemctl restart zabbix-agent

编写zabbix监控文件(传参形式)

7.4 server端进行测试

 [root@m01 ~]# rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel//x86_64/zabbix-release-4.0-.el7.noarch.rpm
[root@m01 ~]# yum install zabbix-get.x86_64 -y
[root@m01 ~]# zabbix_get -s 10.0.0.8 -k tcp_state[TIME_WAIT] [root@m01 ~]# zabbix_get -s 10.0.0.8 -k tcp_state[LISTEN]

server端进行测试

7.5 web端添加

添加tcp_state监控项

点击图形查看状态

用同样的方式再添加一个TIME_WAIT监控项

查看TIME_WAIT状态

7.6 克隆监控项

由于TCP有多种状态,需要添加多个监控项,我们可以使用克隆快速达到创建的效果

但前提是配置文件里面除了监控名称,其他都一样,例:

 [root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
UserParameter=TIME_WAIT,netstat -ant|grep -c TIME_WAIT
UserParameter=LISTEN,netstat -ant|grep -c LISTEN

添加好配置文件后,注意需要重启zabbix-agent端

其他的状态依次添加即可

7.7 创建图形

7.8 查看图形

7.9 设置触发器

点击创建触发器

第八章 邮件报警

8.1 定义发件人

编辑Email报警配置

8.2 定义收件人

8.3 自定义报警内容

定制报警内容:
https://www.zabbix.com/documentation/4.0/zh/manual/appendix/macros/supported_by_location
参考博客

 https://www.cnblogs.com/bixiaoyu/p/7302541.html

发送警告

  报警邮件标题可以使用默认信息,亦可使用如下中文报警内容
名称:Action-Email
默认标题:故障{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}

恢复告警

第九章 微信报警

9.1 查看配置文件里的脚本目录路径

 [root@m01 ~]# grep "^AlertScriptsPath" /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts

9.2 将weixin.py放在zabbix特定目录

 [root@m01 /usr/lib/zabbix/alertscripts]# ll
总用量
-rwxr-xr-x root root 8月 : weixin.py

9.3 配置发信人

添加微信报警,配置脚本参数

 {ALERT.SENDTO}    # 动作
{ALERT.SUBJECT} # 标题
{ALERT.MESSAGE} # 消息

9.4 配置收信人

9.5 登陆企业微信公众号添加账户

https://work.weixin.qq.com/wework_admin/loginpage_wx
1.登陆后在企业号上新建应用

2.上传logo,填写应用名称 ,应用介绍等

3.查看启动应用
同时会生成应用的AgentId以及Secret,这个在后面步骤会有用

4.接口调用测试
http://work.weixin.qq.com/api/devtools/devtool.php

这里的corpid为公司ID

Corpsecret就是刚才创建应用生成的Secrt,确认没问题填写进去然后下一步
如果没问题会显示200状态码

9.6 添加成员

9.7 关注公众号

9.8 查看自己的账号

9.9 修改脚本里的信息

 [root@m01 /usr/lib/zabbix/alertscripts]# cat weixin.py
..............
corpid='微信企业号corpid'
appsecret='应用的Secret'
agentid=应用的id
..............

9.10 发信测试

 [root@m01 /usr/lib/zabbix/alertscripts]# python  weixin.py  你的账号  '发信测试'  ‘微信测试消息’

例:

 python weixin.py  '发信测试' ‘微信测试消息’

9.11 微信号上查看

9.12 配置文件权限(非常重要)

在脚本里面有写日志的功能,所以zabbix用户要有日志文件的所有权限

9.13 发送到整个微信组

虽然我们实现了发送到单个用户的功能,但是如果我们的用户比较多,这样还是麻烦的,不过我们可以发送到整个组,其实脚本里已经预留好了配置,只不过默认注释了。
将脚本修改为以下内容,注释掉用户,打开组设置

  #!/usr/bin/env python

  import requests
import sys
import os
import json
import logging logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s, %(filename)s, %(levelname)s, %(message)s',
datefmt = '%a, %d %b %Y %H:%M:%S',
filename = os.path.join('/tmp','weixin.log'),
filemode = 'a')
corpid='wwd80fafb6320e1efa'
appsecret='Bhf89FnZfMu0e7l8i4yagnAR5Z9TCqKknYbx-SFQvmg'
agentid= token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret
req=requests.get(token_url)
accesstoken=req.json()['access_token'] msgsend_url='https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken #touser=sys.argv[]
toparty=sys.argv[]
subject=sys.argv[]
message=sys.argv[] + "\n\n" +sys.argv[3] params={
#"touser": touser,
"toparty": toparty,
"msgtype": "text",
"agentid": agentid,
"text": {
"content": message
},
"safe":0
} req=requests.post(msgsend_url, data=json.dumps(params)) logging.info('sendto:' + toparty + ';;subject:' + subject + ';;message:' + message)

发送到微信组脚本

9.14 发送到所有用户脚本

 #!/bin/bash
name=$(cat name.txt) for ok in ${name}
do
python weixin.py ${ok} "$1" "$2"
done

发送到所有用户脚本

9.15 随机发送到指定用户脚本

 #!/bin/bash
num=$(echo $(($RANDOM%+)))
name=$(sed -n "${num}p" name.txt)
ok_boy=$(grep -v "${name}" name.txt) for ok in ${ok_boy}
do
python weixin.py ${ok} "$1" "$2"
done

随机发送到指定用户脚本

第十章 自定义模版(新版本不支持)

10.1 监控TCP11种状态

编写zabbix配置文件, 添加以下内容

  [root@web01 ~]# vim /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
UserParameter=ESTABLISHED,netstat -ant|grep -c 'ESTABLISHED'
UserParameter=SYN_SENT,netstat -ant|grep -c 'SYN_SENT'
UserParameter=SYN_RECV,netstat -ant|grep -c 'SYN_RECV'
UserParameter=FIN_WAIT1,netstat -ant|grep -c 'FIN_WAIT1'
UserParameter=FIN_WAIT2,netstat -ant|grep -c 'FIN_WAIT2'
UserParameter=TIME_WAIT,netstat -ant|grep -c 'TIME_WAIT'
UserParameter=CLOSE,netstat -ant|grep -c 'CLOSE'
UserParameter=CLOSE_WAIT,netstat -ant|grep -c 'CLOSE_WAIT'
UserParameter=LAST_ACK,netstat -ant|grep -c 'LAST_ACK'
UserParameter=LISTEN,netstat -ant|grep -c 'LISTEN'
UserParameter=CLOSING,netstat -ant|grep -c 'CLOSING'

编写添加zabbix配置

10.2 重启zabbix-agent

 [root@web01 ~]# systemctl restart zabbix-agent

10.3 测试监控项

使用zabbix-get命令测试

 [root@m01 ~]# yum install zabbix-get.x86_64 -y
[root@tiger-vm- alertscripts]# zabbix_get -s 10.0.0.8 -k ESTABLISHED [root@tiger-vm- alertscripts]# zabbix_get -s 10.0.0.8 -k LISTEN

测试监控项

10.4 导入模版文件

10.5 主机关联模版文件

10.6 查看最新数据

10.7 查看图形

jianshu

第十一章 自定义模版监控nginx状态

11.1 开启监控页面并访问测试

  [root@web01 ~]# cat /etc/nginx/conf.d/status.conf
server {
listen ;
server_name localhost;
location /nginx_status {
stub_status on;
access_log off;
}
} [root@web01 ~]# curl 127.0.0.1/nginx_status/
Active connections:
server accepts handled requests Reading: Writing: Waiting:

开启监控页面并访问测试

11.2 准备nginx监控状态脚本

  [root@web01 /etc/zabbix/zabbix_agentd.d]# cat nginx_monitor.sh
#!/bin/bash
NGINX_COMMAND=$
CACHEFILE="/tmp/nginx_status.txt"
CMD="/usr/bin/curl http://127.0.0.1/nginx_status/"
if [ ! -f $CACHEFILE ];then
$CMD >$CACHEFILE >/dev/null
fi
# Check and run the script
TIMEFLM=`stat -c %Y $CACHEFILE`
TIMENOW=`date +%s` if [ `expr $TIMENOW - $TIMEFLM` -gt ]; then
rm -f $CACHEFILE
fi
if [ ! -f $CACHEFILE ];then
$CMD >$CACHEFILE >/dev/null
fi nginx_active(){
grep 'Active' $CACHEFILE| awk '{print $NF}'
exit ;
}
nginx_reading(){
grep 'Reading' $CACHEFILE| awk '{print $2}'
exit ;
}
nginx_writing(){
grep 'Writing' $CACHEFILE | awk '{print $4}'
exit ;
}
nginx_waiting(){
grep 'Waiting' $CACHEFILE| awk '{print $6}'
exit ;
}
nginx_accepts(){
awk NR== $CACHEFILE| awk '{print $1}'
exit ;
}
nginx_handled(){
awk NR== $CACHEFILE| awk '{print $2}'
exit ;
}
nginx_requests(){
awk NR== $CACHEFILE| awk '{print $3}'
exit ;
} case $NGINX_COMMAND in
active)
nginx_active;
;;
reading)
nginx_reading;
;;
writing)
nginx_writing;
;;
waiting)
nginx_waiting;
;;
accepts)
nginx_accepts;
;;
handled)
nginx_handled;
;;
requests)
nginx_requests;
;;
*)
echo 'Invalid credentials';
exit ;
esac

nginx监控状态脚本

11.3 编写zabbix监控配置文件

 [root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/nginx_status.conf
UserParameter=nginx_status[*],/bin/bash /etc/zabbix/zabbix_agentd.d/nginx_monitor.sh $ # 重启agent端
[root@web01 ~]# systemctl restart zabbix-agent.service

11.4 使用zabbix_get取值

 [root@m01 ~]# zabbix_get -s 10.0.1.7 -k nginx_status[accepts]
 

11.5 导入模版

11.6 链接模版

11.7 查看数据

第十二章 自定义模版监控php状态

12.1 开启监控页面

  [root@web01 ~]# tail - /etc/php-fpm.d/www.conf
pm.status_path = /php_status [root@web01 ~]# cat /etc/nginx/conf.d/status.conf
server {
listen ;
server_name localhost;
location /nginx_status {
stub_status on;
access_log off;
} location /php_status {
fastcgi_pass 127.0.0.1:;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME html$fastcgi_script_name;
include fastcgi_params;
}
} [root@web01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@web01 ~]# systemctl restart nginx.service php-fpm.service

开启监控页面

12.2 访问测试

  [root@web01 ~]# curl 127.0.0.1/php_status
pool: www
process manager: dynamic
start time: /Aug/::: +
start since:
accepted conn:
listen queue:
max listen queue:
listen queue len:
idle processes:
active processes:
total processes:
max active processes:
max children reached:
slow requests:

访问测试

12.3 准备访问脚本

  [root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/fpm.sh
#!/bin/bash
##################################
# Zabbix monitoring script
#
# php-fpm:
# - anything available via FPM status page
#
##################################
# Contact:
# vincent.viallet@gmail.com
##################################
# ChangeLog:
# VV initial creation
################################## # Zabbix requested parameter
ZBX_REQ_DATA="$1"
ZBX_REQ_DATA_URL="$2" # Nginx defaults
NGINX_STATUS_DEFAULT_URL="http://localhost/fpm/status"
WGET_BIN="/usr/bin/wget" #
# Error handling:
# - need to be displayable in Zabbix (avoid NOT_SUPPORTED)
# - items need to be of type "float" (allow negative + float)
#
ERROR_NO_ACCESS_FILE="-0.91"
ERROR_NO_ACCESS="-0.92"
ERROR_WRONG_PARAM="-0.93"
ERROR_DATA="-0.94" # either can not connect / bad host / bad port # Handle host and port if non-default
if [ ! -z "$ZBX_REQ_DATA_URL" ]; then
URL="$ZBX_REQ_DATA_URL"
else
URL="$NGINX_STATUS_DEFAULT_URL"
fi # save the nginx stats in a variable for future parsing
NGINX_STATS=$($WGET_BIN -q $URL -O - >/dev/null) # error during retrieve
if [ $? -ne -o -z "$NGINX_STATS" ]; then
echo $ERROR_DATA
exit
fi #
# Extract data from nginx stats
#
#RESULT=$(echo "$NGINX_STATS" | awk 'print $0;match($0, "^'"$ZBX_REQ_DATA"':[[:space:]]+(.*)", a) { print a[1] }')
#RESULT=$(echo "$NGINX_STATS" | grep "$ZBX_REQ_DATA" | awk -F : '{print $2}')
RESULT=$(echo "$NGINX_STATS" | awk -F : "{if(\$1==\"$ZBX_REQ_DATA\") print \$2}")
if [ $? -ne -o -z "$RESULT" ]; then
echo $ERROR_WRONG_PARAM
exit
fi echo $RESULT exit [root@web01 ~]# bash /etc/zabbix/zabbix_agentd.d/fpm.sh "total processes" http://127.0.0.1/php_status

准备访问脚本

12.4 准备zabbix配置文件

 [root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/fpm.conf
UserParameter=php-fpm[*],/etc/zabbix/zabbix_agentd.d/fpm.sh "$1" "$2"
[root@web01 ~]# systemctl restart zabbix-agent.service

12.5 使用zabbix_get取值

 [root@m01 ~]# zabbix_get -s 10.0.1.7 -k php-fpm["total processes",http://127.0.0.1/php_status]
 

12.6 导入模版

导入之后需要修改一下模版里的宏配置

第十三章 WEB监控

需求,监控页面状态码

添加Web场景

配置步骤:

第十四章 故障记录

故障1

故障现象:
提示zabbix-server is not running

报错日志:

 ::202215.171 database is down: reconnecting in  seconds
::202225.172 [Z3001] connection to database 'zabbix' failed: [] Access denied for user 'zabbix'@'localhost' (using password: NO)

故障原因:
zabbix-server的配置文件里配有配置数据库密码
故障解决:
添加正确的数据库账号密码信息

 [root@m01 ~]# grep "^DB" /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix

故障2

故障现象:微信报警失败
报错日志:

  [root@m01 ~]# tail -f /var/log/zabbix/zabbix_server.log
Problem name: TIME_WAIT过多
Host: web01
Severity: Average Original problem ID:
'": Traceback (most recent call last):
8 File "/usr/lib/zabbix/alertscripts/weixin.py", line 7, in <module>
9 import requests
10 ImportError: No module named requests

微信报警日志

问题原因:
缺少模块 requests

问题解决:
安装缺失的依赖包

 [root@m01 ~]# yum install python-pip
[root@m01 ~]# pip install --upgrade pip
[root@m01 ~]# pip install requests

故障3

故障现象:
在server端使用zabbix_get命令测试键值命令时提示警告

 [root@m01 ~]# zabbix_get -s 10.0.1.7 -k ESTABLISHED
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)

问题原因:
zabbix_agent是以普通用户zabbix运行的,而普通用户执行netstat -antp时会有警告,网上查找发现只要不是用p参数就可以以普通用户运行
解决方案:
监控脚本里的命令修改为netstat -ant

转自虎哥:https://www.lxh1.com/2019/12/09/linux/zabbix%E7%9B%91%E6%8E%A7%E6%9C%8D%E5%8A%A1/

zabbix入门的更多相关文章

  1. zabbix入门知识

    zabbix入门知识 zabbix中文手册 https://www.zabbix.com/documentation/3.4/manual/ 1.zabbix介绍 Zabbix 是一个企业级的分布式开 ...

  2. 25.Zabbix入门必备

    ==Zabbix入门必备== 1.配置zabbix源 [root@zabbix ~]# cat /etc/yum.repos.d/zabbix.repo [zabbix] name=Zabbix Of ...

  3. zabbix入门之配置邮件告警

    zabbix入门之配置邮件告警 邮件环境搭建 使用本地邮箱账号发送邮件 zabbix-server 端安装 mailx .sendmail或者psotfix 服务,系统默认安装好了postfix #安 ...

  4. zabbix入门之定义触发器

    zabbix入门之定义触发器 触发器的概念 触发器的定义:界定某特定的item 采集到数据的非合理区间或非合理状态.通常为逻辑表达式. 逻辑表达式(阈值):通常用于定义数据的不合理区间,其结果如下: ...

  5. zabbix入门之监控MySQL

    zabbix入门之监控MySQL 这里使用的是zabbix官方自带的MySQL监控模板. 首先确保在被监控主机安装zabbix-agent.zabbix-sender,并且将主机加入监控节点.具体操作 ...

  6. zabbix入门之添加监控项

    zabbix入门之添加监控项 添加一个不带参数的监控项(system.cpu.switches) 进入"配置"-->"主机"选择某主机的"监控项 ...

  7. zabbix入门到精通之Zabbix对linux主机的监控

    我们大概了解了怎么对台主机进行监控,主要步骤设计到添加主机,并且为主机添加监控项,这里主要为item,然后在item的基础上对item进行绘图并且通过screen的方式把不同的监控图像汇总到一张scr ...

  8. zabbix入门之使用QQ邮箱接受报警信息

    首先说明我使用的是3.2版本的zabbix 既然要发邮件到QQ邮箱报警,那么在centos7上就肯定需要安装发送邮件的软件了 安装应用yum install mailx sendmail -y接着修改 ...

  9. centos7之zabbix入门(一)

    初始化状态如下 首先按照下面的步骤进行,主机名和可见名可以自己起,dns那里最好也填一下,其它默认就可以了 点击确认后,自动跳转到以下页面 可以看到zbx那里没有亮起来,说明还没有配置成功,接下来点击 ...

随机推荐

  1. iOS随记

    ios 10 访问设置问题 从ios8之api支持访问设置通过访问UIApplicationOpenSettingsURLString来跳转设置 NSURL*url=[NSURL URLWithStr ...

  2. 【H5最强攻略】百度人脸情绪实时识别

    最近看的各位大佬都在体验百度大脑2019年全新上线的24项AI能力! (我也按耐不住了,赶紧走一波- 哈哈) 接下来要介绍的就是H5端的人脸检测攻略. 附带详细的介绍,代码,以及演示体验等 欢迎提出各 ...

  3. 安装上传下载插件,jdk及redis

    安装rz sz (1)编译安装root 账号登陆后,依次执行以下命令:cd /tmpwget http://www.ohse.de/uwe/releases/lrzsz-0.12.20.tar.gzt ...

  4. Jackson version is too old 2.xx

    我使用的是IDEA,很简单. 切换到project,如果下面的module版本是2.65,上面的jackson.core.xx小于2.65就会报old,如果高于2.65就会报不兼容. 所以调整成相同的 ...

  5. 命令模式彻底删除oracle实例

    步骤一:关闭数据库export ORACLE_SID=bgsp1. sqlplus / as sysdba2. shutdown immediate步骤二:删除实例相关文件1. find $ORACL ...

  6. MSSQL 删除数据库表数据

    --删除数据库表数据 慎用 create PROCEDURE sp_DeleteAllData AS ) ) ) ) ) ) begin try begin tran -- 失效索引,触发器 open ...

  7. NCCL(Nvidia Collective multi-GPU Communication Library) Nvidia英伟达的Multi-GPU多卡通信框架NCCL 学习;PCIe 速率调研;

    为了了解,上来先看几篇中文博客进行简单了解: 如何理解Nvidia英伟达的Multi-GPU多卡通信框架NCCL?(较为优秀的文章) 使用NCCL进行NVIDIA GPU卡之间的通信(GPU卡通信模式 ...

  8. Python—包管理工具与上传工具

    https://blog.csdn.net/libbyandhelen/article/details/78808959 https://www.cnblogs.com/nineep/p/947529 ...

  9. Java Web 学习(9) —— EL 与 JSTL

    EL 与 JSTL EL与JSTL的作用是为了减少JSP页面中的代码. EL EL(Expression Language):表达式语言 常用于取值 语法 EL 表达式以${开头,以}结束. 多个表达 ...

  10. bzoj5219 [Lydsy2017省队十连测] 最长路径

    题意: 做法来自 首先竞赛图缩点后是一条链,\(1\)号节点在开头的那个\(SCC\)中,因此从\(1\)号节点出发的最长链即为\(1\)号节点所在的\(SCC\)的大小\(+1\)号节点拓扑序之后的 ...