1.公司监控可以从哪些方面入手
1.硬件监控路由器、交换机、防火墙
2.系统监控CPU、内存、磁盘、硬盘、网络、进程、TCP
3.服务监控Nginx、PHP、Tomcat、Redis、memcache、MySQL
5.日志监控ELK(收集、存储、分析、展示)日志易
6.WEB监控请求时间、响应时间、加载时间
7.业务监控,推广活动引入多少流量、产生多少注册量、带来多大价值
2.系统常用的监控命令
- CPU监控命令:top
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%us:用户空间占用cpu的百分比
%sy:内核空间占用cpu百分比
%ni:改变过优先级的进程占用cpu的百分比
%id:空闲CPU百分比
%wa:IO等待占用cpu的百分比
%hi:硬中断占用CPU的百分比
%si:软中断占用cpu的百分比
- 系统负载:w、uptime
[root@db02 ~]# w
09:23:40 up 25 min, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 09:00 22:44 0.04s 0.01s bash
root pts/0 10.0.0.1 09:03 4.00s 0.02s 0.00s w
[root@db02 ~]# uptime
09:23:45 up 25 min, 2 users, load average: 0.00, 0.01, 0.05
- 内存监控命令:free
[root@db02 ~]# free -m
total used free shared buff/cache available
Mem: 974 100 729 7 144 715
Swap: 0 0 0
Men行(第二行)是内存的使用情况
Swap行(第三行)是交换空间的使用情况
total:列显示系统总的可用物理内存和交换空间大小
used:列显示已经被使用的物理内存和交换空间。
free:显示还有多少物理内存和交换空间可用使用
shared:列显示被buffer和cache使用的物理内存大小
available:例显示还可以被应用程序使用的物理内存大小。
- 磁盘监控命令:df(使用率)、iotop(监控磁盘io)
[root@db02 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 20G 1.6G 18G 9% /
[root@db02 ~]# iotop -o
Total DISK READ : 0.00 B/s | Total DISK WRITE : 0.00 B/s
Actual DISK READ: 0.00 B/s | Actual DISK WRITE: 0.00 B/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
- 网络监控命令: ifconfig、 route、 glances、 iftop(监控网卡流量)、 nethogs、 netstat
单位换算
Mbps 100Mbps/8
MB 12MB
iftop 中间的<= =>这两个左右箭头,表示的是流量的方向。
TX:发送流量、 RX:接收流量、 TOTAL:总流量
#查看 TCP11 中状态
netstat -an|grep ESTABLISHED
netstat -rn # 查看路由信息
netstat -lntup
3.zabbix的安装部署(4.0版本)
-
去清华源找zabbix源
更新zabbix源
[root@db02 ~]# rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
- 安装 Zabbix 程序包,以及 MySQL、 Zabbix-agent
[root@db02 ~]# yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent mariadb-server
#启动数据库,并设置为开机自启动
[root@db01 ~]# systemctl start mariadb.service && systemctl enable mariadb.service
- 初始化数据库数据,并设置root密码
[root@db01 ~]# mysql_secure_installation
- 登录数据库并创建zabbix库和授权用户
[root@db01 ~]# mysql -uroot -p123456
create database zabbix character set utf8 collate utf8_bin;
grant all on zabbix.* to zabbix@localhost identified by 'zabbix';
flush privileges;
#测试是否能够正常登录
[root@db01 ~]# mysql -uzabbix -pzabbix
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| zabbix |
+--------------------+
2 rows in set (0.00 sec)
- 导入Zabbix数据至数据库
[root@db01 ~]# zcat /usr/share/doc/zabbix-server-mysql-4.0.21/create.sql.gz |mysql -uzabbix -pzabbix zabbix
- 修改zabbix配置文件
[root@db01 ~]# grep "^DB" /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
- 启动zabbix并加入开机自启动
[root@db01 ~]# systemctl start zabbix-server.service && systemctl enable zabbix-server.service
- 修改PHP时区,并启动httpd
[root@m01 ~]# grep "Shanghai" /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/Shanghai
systemctl start httpd
-
页面访问测试
- 启动客户端
[root@db01 ~]# systemctl start zabbix-agent.service
4.解决zabbix图形界面中文字体乱码
[root@db01 ~]# yum install wqy-microhei-fonts -y
[root@db01 ~]# cp /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/zabbix/assets/fonts/graphfont.ttf
cp: overwrite ‘/usr/share/zabbix/assets/fonts/graphfont.ttf’? y
5.服务端安装zabbix测试命令
[root@db01 ~]# yum install -y zabbix-get.x86_64
6.在需被监控的机器安装zabbix-agent客户端
- 安装zabbix源(aget源)
rpm -ivh https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.11-1.el7.x86_64.rpm
- 安装客户端
yum install -y zabbix-agent
- 修改主机配文件并重启agent服务
[root@db02 ~]# vim /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.0.0.51 #zabbix服务端ip
ServerActive=10.0.0.51 #zabbix服务端ip
Hostname=db02 #本台服务器的名称
Include=/etc/zabbix/zabbix_agentd.d/*.conf #添加自定义监控项的路径,文件以*.conf结尾即可
[root@db02 ~]# systemctl restart zabbix-agent.service
- 在zabbix服务端利用zabbix_get看出是否可以取值这台机器
[root@db01 ~]# zabbix_get -s 10.0.0.52 -k agent.hostname
db02
7.在zabbix web页面上添加主机
8.zabbix监控项的概念
监控项:你要监控的内容,项目1(内存) 项目2(CPU)
模版:将所有的监控项汇总在一起,单独保存在一个集合中,当其他同服务机器再次加入时候,直接使用。
键值:监控项目名称:将具体的值返回
应用集合:Tag 例如:CPU可以有多个监控项,将其多个监控指标归纳到CPU这一个大集合中,方便过滤查看。例如只查看CPU应用监控的各项键值:设定某个监控项报警的阈值条件
触发器:监控项的趋势,可以是多个监控项的内容
图形:把多个图形放在一起展示总结:只要能取到值,就能监控
9.自定义取值的方法
#查看zabbix_agent配置文件观察lnclude路径
[root@db02 /etc/zabbix/zabbix_agentd.d]# cat /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.0.0.51
ServerActive=10.0.0.51
Hostname=db02
Include=/etc/zabbix/zabbix_agentd.d/*.conf
#在/etc/zabbix/zabbix_agentd.d/创建一个*.conf结尾文件
[root@db02 /etc/zabbix/zabbix_agentd.d]# vim tcp.conf
UserParameter=TIME_WAIT,netstat -antp|awk 'NR>2{print $6}'|grep TIME_WAIT|wc -l
UserParameter=LISTEN,netstat -antp|awk 'NR>2{print $6}'|grep LISTEN|wc -l
UserParameter=ESTABLISHED,netstat -antp|awk 'NR>2{print $6}'|grep ESTABLISHED|wc -l
#格式UserParameter=键值名称,命令取值
#重启agent服务
[root@db02 /etc/zabbix/zabbix_agentd.d]# systemctl restart zabbix-agent.service
#在zabbix服务端用get测试查看是否可取到值
[root@db01 /etc/zabbix/zabbix_agentd.d]# zabbix_get -s 10.0.0.52 -k TIME_WAIT
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
33
#发现可以取到值,但是zabbix是以普通用户运行,所有需将netstat -antp中的p去掉为netstat -ant即可,然后重启服务
#Zabbix客户端自定义配置文件再次改变
[root@db02 /etc/zabbix/zabbix_agentd.d]# vim tcp.conf
UserParameter=TIME_WAIT,netstat -ant|awk 'NR>2{print $6}'|grep TIME_WAIT|wc -l
UserParameter=LISTEN,netstat -ant|awk 'NR>2{print $6}'|grep LISTEN|wc -l
UserParameter=ESTABLISHED,netstat -ant|awk 'NR>2{print $6}'|grep ESTABLISHED|wc -l
[root@db02 /etc/zabbix/zabbix_agentd.d]# systemctl restart zabbix-agent.service
#server服务再次尝试取值
[root@db01 /etc/zabbix/zabbix_agentd.d]# zabbix_get -s 10.0.0.52 -k TIME_WAIT
33
-
在web页面将监控项添加进去
-
使用隔离,快速添加监控项
-
添加完成后,检查是否能够正常取到值
10.触发器的创建
-
也可以测试一下看是否能够触发报警
-
不满足条件状态
-
满足条件的状态
11.添加图形监控页面
12.聚合图形的添加
13.创建自定义模版(方便后期机器的监控)
按照添加和克隆的方法将,监控项全部添加至模版中,触发器,图形都一样
14.利用模版的方式监控一台新主机
15.添加邮件报警
-
设置发信人信息
-
设置收信人信息
-
设置动作,并自定义为中文邮件消息
发送警告
报警邮件标题可以使用默认信息,亦可使用如下中文报警内容
名称: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}
16.微信报警
- 登录企业微信公众号添加账号
https://work.weixin.qq.com/wework_admin/loginpage_wx
-
登录后在企业号上新建应用
-
上传logo,填写应用名称,应用介绍等
-
查看启动应用
同时会生成应用的AgentId以及Secret,这个在后面步骤会有用
- 接口调用测试
http://work.weixin.qq.com/api/devtools/devtool.php
-
这里的corpid为公司ID
-
Corpsecret就是刚才创建应用生成的Secrt,确认没问题填写进去然后下一步
如果没问题会显示200状态码
-
添加成员
-
关注公众号
-
查看自己的账号
- 查看zabbix服务端配置文件脚本存放路径
[root@db01 ~]# grep "^AlertScriptsPath" /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts
- 将脚本weixin.py放在zabbix特定目录
[root@db01 /usr/lib/zabbix/alertscripts]# ll
total 4
-rw-r--r-- 1 root root 1176 Nov 18 2019 weixin.py
-
web 页面配置发信人
#参数
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
-
配置收信人
- 修改脚本的信息
[root@m01 /usr/lib/zabbix/alertscripts]# cat weixin.py
..............
corpid='微信企业号corpid'
appsecret='应用的Secret'
agentid=应用的id
..............
- 安装python安装包管理工具,和工具
yum install python-pip -y
pip install requests
- 发信测试
[root@db01 /usr/lib/zabbix/alertscripts]# python weixin.py 微信账号姓名 '发信测试' '微信测试消息
- 修改脚本的权限
chown -R zabbix.zabbix weixin.py
chmod +x weixin.py
chown -R zabbix.zabbix /tmp/weixin.log
17.自动发现和自动注册
#1.被监控服务器需安装zabbix-agent
#2.在zabbix-agent配置文件中写好,此台服务的名称
[root@db02 ~]# cat /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.0.0.51
ServerActive=10.0.0.51
Hostname=db02 # 这个名称将成为自动发现和注册的条件
Include=/etc/zabbix/zabbix_agentd.d/*.conf
#3.需将本机加入hosts解析中
[root@db02 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.52 db02 #本机的hosts解析
#4.zabbix-server服务端,需将,被监控的Zabbix客户端加入hosts解析,访问web页面显示主机名
[root@db01 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.51 db01
10.0.0.52 db02
10.0.0.53 db03
web页面设置
-
创建自动发现规则
-
创建自动发现事件,并且发现后进行相应的操作
- 创建自动注册事件
Zabbix的自动注册规则主要用于Agent主动且自动向Server注册,适用于当前云环境下的监控,主要由于云服务器ip比较随机不好控制。 Zabbix-Server在收到Zabbix-Agent的注册请求时,如果没有收到IP地址的值,则使用Zabbix-Agent和Zabbix-Server建立TCP连接时使用的IP地址。
18.主动模式和被动模式
被动模式:服务端发送一条指令,客户端就执行一条,100条需要来回一百次
主动模式:服务端把需要请求的数据打包在一起,客户端一次性执行完成再返回给服务端,100条数据只要来回一次
-
被动模式数据采集例如下图一秒返回一个监控项的值
-
web页面设置(修改单个监控项为主动模式)
-
web页面设置(批量更改模版监控项为主动模式)
再次去查看最新数据,可发现所有的数据更新时间都在同一秒
19.低级自动发现
低级自动发现,创建监控模版,通过转换为json格式取值,再通过函数传参的取值的方式,并设置相应自动发现的规则,如正则表达式规则以及过滤等规则,做到自动监控,不同服务器同类型服务,但实际数据不同监控。例如:mysql多实例,每台机磁盘不同的挂载点等
-
系统自带的低级自动发现会显示红字。
-
查看zabbix所有key过滤后展示
-
解析成json格式
-
过滤出磁盘挂载类型
-
web页面查看zabbix显示并没有那么多,是因为做了正则表达过滤
- 使用zabbix_get获取key
因为根据过滤规则,只发现了一个xfs的key,使用zabbix_get可以查看到这个key
[root@db01 ~]# zabbix_get -s 10.0.0.52 -k vfs.fs.size[{#FSNAME},free]
ZBX_NOTSUPPORTED: Cannot obtain filesystem information: [2] No such file or directory
#{#FSNAME}:为函数,我们下面直接给这个函数一个值,如:/目录
[root@db01 ~]# zabbix_agentd -p|grep vfs.fs.size
vfs.fs.size[/,free] [u|18432745472]
[root@db01 ~]# zabbix_get -s 10.0.0.52 -k vfs.fs.size[/,free]
18740060160
20.利用zabbix低级自动发现监控mysql多实例
实验环境最少2G内存
- mysql安装
#1.安装依赖源
yum install -y cmake openssl-devel gcc gcc-c++ glibc ncurses-devel autoconf libaio-devel
#2.上传压缩包并解压
tar xf mysql-5.6.42-linux-glibc2.12-x86_64.tar.gz
#3.创建目录,并创建原链接
mkdir /application
mv mysql-5.6.42-linux-glibc2.12-x86_64 /application/mysql-5.6.42
cd /application/
ln -s mysql-5.6.42 mysql
#4.拷贝配置文件
cp mysql/support-files/my-default.cnf /etc/my.cnf
cp mysql/support-files/mysql.server /etc/init.d/mysqld
#5.创建mysql用户,并修改权限
useradd mysql -M -s /sbin/nologin
chown -R mysql.mysql /application/mysql*
#6.初始化mysql
cd mysql/scripts/
./mysql_install_db --user=mysql --basedir=/application/mysql --datadir=/application/mysql/data/
#7.添加环境变量
vim /etc/profile.d/mysql.sh
export PATH="/application/mysql/bin:$PATH"
source /etc/profile
#8.替换路径
sed -i 's#/usr/local#/application#g' /etc/init.d/mysqld
#9.启动测试
service mysqld start
mysql
service mysqld stop
---------------------------------------------------------------------------------
#部署多实例
#1.创建多个目录(存放配置文件)
mkdir /data/330{7,8,9} -p
tree /data/
#2.准备多个实例的配置文件
vim /data/3307/my.cnf
[mysqld]
basedir = /application/mysql
datadir = /data/3307/data
socket = /data/3307/data/mysql.sock
log_error = /data/3307/data/mysql.err
pid_file = /data/3307/data/mysql.pid
log_bin = /data/3307/data/mysql-bin
server_id = 7
port = 3307
cd /data/3307/
cp my.cnf /data/3308/my.cnf && cp my.cnf /data/3309/my.cnf
sed -i 's#7#8#g' /data/3308/my.cnf && sed -i 's#7#9#g' /data/3309/my.cnf
#3.对多个实例进行初始化
cd /application/mysql/scripts/
./mysql_install_db --defaults-file=/data/3307/my.cnf --user=mysql --basedir=/application/mysql --datadir=/data/3307/data
./mysql_install_db --defaults-file=/data/3308/my.cnf --user=mysql --basedir=/application/mysql --datadir=/data/3308/data
./mysql_install_db --defaults-file=/data/3309/my.cnf --user=mysql --basedir=/application/mysql --datadir=/data/3309/data
tree -L 2 /data/
#4.启动多个实例
mysqld_safe --defaults-file=/data/3307/my.cnf &
mysqld_safe --defaults-file=/data/3308/my.cnf &
mysqld_safe --defaults-file=/data/3309/my.cnf &
netstat -lntup|grep mysql
- 创建自动发现配置文件
vim /etc/zabbix/zabbix_agentd.d/mysql_discovery.conf
UserParameter=mysql.discovery,/bin/bash /server/scripts/mysql_discovery.sh #key执行脚本
- 创建自动发现多实例脚本(带装换json格式)
mkdir /server/scripts/ -p
vim /server/scripts/mysql_discovery.sh
#!/bin/bash
#mysql low-level discovery
res=$(netstat -lntp|awk -F "[ :\t]+" '/mysqld/{print $4}')
port=($res)
printf '{'
printf '"data":['
for key in ${!port[@]}
do
if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
printf '{'
printf "\"{#MYSQLPORT}\":\"${port[${key}]}\"},"
else [[ "${key}" -eq "((${#port[@]}-1))" ]]
printf '{'
printf "\"{#MYSQLPORT}\":\"${port[${key}]}\"}"
fi
done
printf ']'
printf '}\n'
# {#MYSQLPORT}:为取值变量
- 测试自动发现脚本&&重启zabbix-agent
[root@db02 ~]# sh /server/scripts/mysql_discovery.sh
{"data":[{"{#MYSQLPORT}":"3307"},{"{#MYSQLPORT}":"3308"},{"{#MYSQLPORT}":"3309"}]}
systemctl restart zabbix-agent.service
- 在zabbix服务端测试取值
[root@db01 ~]# zabbix_get -s 10.0.0.52 -k mysql.discovery
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
{"data":[]}
#原因是zabbix用户不能使用netstat的-p参数,解决方法为给netstat命令添加s超级权限
#再存放脚本的服务器为命令添加权限
[root@db01 ~]# which netstat
/usr/bin/netstat
[root@db01 ~]# chmod u+s /usr/bin/netstat
[root@db01 ~]# ll /usr/bin/netstat
-rwsr-xr-x. 1 root root 155008 Aug 9 2019 /usr/bin/netstat
#再次测试是否可以取值
[root@db01 ~]# zabbix_get -s 10.0.0.52 -k mysql.discovery
{"data":[{"{#MYSQLPORT}":"3307"},{"{#MYSQLPORT}":"3308"},{"{#MYSQLPORT}":"3309"}]}
-
在web页面设置自动发现的规则
-
为被监控服务创建自动发现
-
创建一个正则表达式规则
- 为多实例创建登录密码,并模仿zabbix自带的mysql监控配置修改监控项