第一章 监控知识基本概述

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. boostrap 学习笔记

    bootstrap : 是全球最受欢迎的前端组件库,用于开发响应式布局.移动设备优先的 WEB 项目. 用于项目样式的快速搭建,真的是..特别快.. 随便找两个cdn引用就能使用了. https:// ...

  2. dedecmsV5.7 调用其他站点的数据库的数据的方法

    问题:网站是用dedecmsv5.7写的,后来加了一套论坛discuzX3.4.因为dede要调用dz的数据,本来用jsonp跨域请求的数据,但是m端掉用的时候会把请求的链接的域名后面自动加个/m(不 ...

  3. 循环语句for基本概述

    循环语句for基本概述 01. for循环基础语法 for 变量名 in [ 取值列表 ]do 循环体done 02. for循环基本使用示例 #取值列表有多种取值方式,可以直接读取in后面的值,默认 ...

  4. ubuntu 或centos 使用Docker搭建anaconda+python基本环境

    ubuntu 16 使用Docker安装anacondaubuntu docker 安装centos docker 安装搜索可用镜像 docker search anaconda 拉取你中意的镜像 d ...

  5. 【poj2661】Factstone Benchmark(斯特林公式)

    传送门 题意: 给出\(x,x\leq 12\),求最大的\(n\),满足\(n!\leq 2^{2^x}\). 思路: 通过斯特林公式: \[ n!\approx \sqrt{2\pi n}\cdo ...

  6. Python程序中的进程操作-进程间数据共享(multiprocess.Manager)

    目录 一.进程之间的数据共享 1.1 Manager模块介绍 1.2 Manager例子 一.进程之间的数据共享 展望未来,基于消息传递的并发编程是大势所趋 即便是使用线程,推荐做法也是将程序设计为大 ...

  7. Python程序中的进程操作-进程池(multiprocess.Pool)

    目录 一.进程池 二.概念介绍--multiprocess.Pool 三.参数用法 四.主要方法 五.其他方法(了解) 六.代码实例--multiprocess.Pool 6.1 同步 6.2 异步 ...

  8. PostgreSQL 12 YUM安装

    目录 1.创建postgres用户 2.查看操作系统版本 3.配置yum源(对应CentOS 6) 4.安装客户端包 5.安装服务器端包 6.初始化数据库和设置自启动服务 7.postgres用户的b ...

  9. 开发常用Git/Linux/idea命令快捷键总结(持续更新)

    在开发过程中,会使用越来越多的命令,或快捷键,来帮助我们提高工作效率.本文记录了我在平时积累的常用命令,分享给大家. git命令 基本命令 set LESSCHARSET=utf-8 --idea T ...

  10. Wpf Prism.Unity 7

    Prism.Unity 中UnityBootStrapper已经不用了,可以继承PrismApplication 1.Install-package Prism.Unity -v 7.2.0.1367 ...