- 监控Linux系统状态
- 监控介绍
- 安装zabbix4.0
- 监控客户机-添加主机
- 监控客户机-管理模板
- 监控客户机-管理图形和窗口
- 监控客户机-配置触发器
- 解决中文名称不能写数据库的问题
- 解决图形中文乱码
- zabbix邮件告警
- zabbix监控Nginx
- zabbix监控Tomcat
- zabbix监控MySQL
具体监控命令见此链接:https://my.oschina.net/u/4093217/blog/3036056
监控cpu
w和uptime查看系统负载top 动态查看进程使用资源情况,shell脚本中会使用 占用CPU的进程可以是Running,也可以是Waiting 某一时刻1颗CPU只能有一个进程在使用其资源top 3秒显示一次,动态的,默认按cpu百分比排序,按大写的m(M)键,按照内存的使用率大小排序 top -bn1 静态的显示,一次性把所有的信息全部输出出来,也是按cpu百分比排序,适合在写脚本时使用cat /proc/cpuinfo 查看CPU信息lscpu 也可以查看cpu信息free命令 ,用来查看内存和swap使用情况,关注最后一列的available,这个数字是真正剩余的物理内存大小
手动增加swap
模拟一个G的磁盘空间:
dd if=/dev/zero of=/bigfile bs=1M count=1000 dd(对磁盘进行操作的工具),if(从哪里来),of(目标的文件或磁盘,此处写入到跟目录下,叫bigfile),bs(决定文件大小)=1M(即每个块为1M),count=1000(共有1000个块),也可以写成bs=100M,count=10
mkswap /bigfile 格式化成swap格式chmod 600 /bigfile 更改权限
swapon /bigfile 挂载
之前的swap大小
挂载后的大小
监控磁盘
yum install -y sysstat 安装iostat、sariotop 当磁盘io很忙,可以使用iotop查看,获得读写的进程是哪个,按IO使用率大小排序综合工具,断定瓶颈点 vmstat 1,关注r、b、si、so、bi、bo、id、wa
监控网卡流量
sar -n DEV 1 10 查看网卡流量 1是每一秒钟显示一次,10是显示10次bit 比特(带宽单位)Byte 字节(速度传输单位)8bit =1Byte 2MB/s 2*8=16Mbit 100Mbit 12.8MB/snload命令 动态的显示网卡实时速度的一个页ethtool ens33 查看网卡是否连接mii-tool ens33 查看网卡是否连接
查看进程:
ps aux 、ps -elf 、ps -eLf(查看线程)
查看网络连接状况:
netstat netstat -lnp 查看监听端口 需要关注上面的端口部分netstat -an 查看tcp/ip 所有的连接状态netstat -ltnp 只查看tcp的监听端口netstat -ltunp 查看tcp和udp的监听端口ss -an和netstat异曲同工,显示tcpip状态
抓包:
tcpdump -nn -r 1.cap -r读取一个包tcpdump -nn -i ens33tcpdump -nn -i ens33 port 22 只要端口是22的包tcpdump -nn -i ens33 not port 80 不要80端口的包tcpdump -nn -i ens33 not port 80 and host 192.168.247.3 不要80端口并且host是192.168.247.3 的包tcpdump -nn -i ens33 -c 100 只抓取100个包tshark: tshark -i ens33 -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri"
监控介绍
做监控的目的:可以提前发现潜在故障隐患,第一时间解决掉,把影响降低。、
常见的监控软件:
cacti、nagios、zabbix、open-falcon、prometheus、grafana等等
zabbix 4.0安装
zabbix官网 www.zabbix.com ,进入官网下载(从二进制包安装比较方便快捷)
yum源安装zabbix :
rpm -ivh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
yum list |grep zabbix 需要安装服务端、客户端的程序zabbix-get 命令行工具zabbix-proxy 代理软件zabbix-web webUI ,web界面,监控web的连接时间、加载时间,确认网站没有挂掉zabbix-agent 客户端的程序,需要启动zabbix-server-mysql 服务端的程序,需要启动 zabbix-web-mysql web和mysql相关组件
需要安装的包:
yum install -y zabbix-agent.x86_64 zabbix-get.x86_64 zabbix-server-mysql.x86_64 zabbix-web.noarch zabbix-web-mysql.noarch
创建zabbix库和用户
create database zabbix;grant all on zabbix.* to 'zabbix'@'127.0.0.1' identified by 'tobe';
编辑zabbix配置文件 /etc/zabbix/zabbix_server.conf
根据刚才创建的数据库名称,创建的用户名密码修改
DBHost=127.0.0.1 #zabbix需要连接的数据库地址DBName=zabbix 库名DBUser=zabbix #用户名DBPassword=tobe #密码
把zabbix-server-mysql中的sql导入到zabbix库中,所在位置 ls /usr/share/doc/zabbix-server-mysql-4.0.9/create.sql.gz
解压
gzip -d /usr/share/doc/zabbix-server-mysql-4.0.9/create.sql.gz
导入到zabbix库中
mysql -uroot -ptobe zabbix < /usr/share/doc/zabbix-server-mysql-4.0.9/create.sql 启动zabbix服务 systemctl start zabbix-server.service设置开启启动 systemctl enable zabbix-server
注意关闭防火墙或iptables:
setenforce 0systemctl stop firewalld
启动成功:
如果启动失败,注意查看日志报错:
zabbix_server日志存放路径 : /var/log/zabbix/zabbix_server.log
netstat -lntp 会监听10051端口
zabbix_agentd配置文件 : vim /etc/zabbix/zabbix_agentd.conf
配置文件中需要修改下面两处内容
zabbix监控有两种模式:主动模式和被动模式
Server=127.0.0.1ServerActive=127.0.0.1 客户端主动上报
启动agent服务 systemctl start zabbix-agent.service设置开机启动 systemctl enable zabbix-agent
zabbix_agentd日志存放路径 : /var/log/zabbix/zabbix_agentd.log
ps aux |grep zabbix_agentd
安装webUI,在浏览器上安装,需要启动httpd服务
netstat -lntp 此时80端口监听的是nginx,需要停掉,监听httpd
systemctl stop nginx 停掉Nginx
systemctl start httpd 启动httpd
或者使用kill -9 PID结束进程
浏览器中访问zabbix: url直接输入:192.168.183.133/zabbix ,出现安装页面
安装页面点击下一步,PHP option "date.timezone"出现报错
需要修改httpd配置文件 vim /etc/php.ini
lamp的配置文件路径 ls /etc/php.inilnmp的配置文件路径 ls /usr/local/php-fpm/etc/php.ini
找到date.timezone,加上时区
systemctl restart httpd.service 重启httpd服务,然后到页面刷新即可,点击下一步
date.timezone = Asia/Shanghai
输入数据库的配置信息
下一步,更改host,name自己定义,点击下一步:安装完成
进入登录界面,用户名admin,密码zabbix
监控客户机-添加主机
在第二台机器上:
rpm -ivh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpmyum install -y zabbix-agent.x86_64 客户端上只需要安装此包
编辑配置文件:vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.183.3 ServerActive=192.168.183.3 修改成zabbix-server的ip
启动agent服务 systemctl start zabbix-agent.service设置开机启动 systemctl enable zabbix-agent
ps aux |grep zabbix_agentd
netstat -lntp zabbix_agentd监听10050端口,会和10051通信,如果有防火墙的话,需要放行10050端口,或加白名单
加白名单 实现通信 : iptables -I INPUT -s 192.168.183.3 -j ACCEPT
到weiUI界面设置
先添加主机组,在到hosts中,右边找到(创建主机)create hosts添加,一台机器可以属于多个组
此处IP地址为客户端10050端口的地址
添加监控项目:
1、到模板中->创建模板
2、把常用的监控项目添加到test模板中
模板里的Template OS Linux中的应用集->CPU的监控项->拷贝(CPU idle time和Processor load (1 min average per core))到test模板
拷贝出这两个文件到templates模板中
复制完成后,test模板的监控项中,出现这两项
继续点击模板里的Template OS Linux->监控项->复制Total memory,复制到test中
把Template OS AIX中监控项:Free real memory复制到test,方法同上
监控客户机-管理模板
点击Template OS Linux->全克隆
全克隆之后修改模板名称和群组,最下面点击添加
进入刚刚克隆的模板中把链接取消并清理,点击更新
刚刚克隆的模板中把用不到的都删除,保留所需要的,把选择的两项删除
删除是为了把在删监控项时减少报错,因为触发器中有和监控项关联的
触发器中也保留所需要的
监控项也保留所需要的
应用集也一样
自动发现规则最好不动
完成后,到主机选择新添加的主机tobejiang->模板->选择刚刚克隆的模板tobe->添加->更新
在第一台机器上
使用 zabbix_get -s 192.168.183.33 -p 10050 -k "system.cpu.load[all,avg1]" 测试是否通信iptables -I INPUT -s 192.168.183.33 -j ACCEPT 在第一台server上也要加白名单
出现报错
两台机器都需要重启:服务端重启 systemctl restart zabbix-server.service客户端重启 systemctl restart zabbix-agent.service
重启服务后,成功
主机也启动成功
此时在最新数据中,选中此模板->应用,也出现了数据
监测->图形中,选择对应主机选项,下方出现图形界面
监控客户机-管理图形和窗口
监测中的自动发现此时是空的
到配置->主机->选择tobejiang的自动发现->选中点击现在检查
点击图形,会多出几项
监测下的图形,也多出这几项
把图形放到:监测->仪表板中
操作方法:监测->聚合图形->创建聚合图形
添加完成后点击后面的构造函数->点击更改,选择需要显示的图形
自定义仪表板:
编辑仪表盘右边模块->创建新的->输入名称->点击空白处添加构件
添加一个新的构件:图形->下面的添加新数据集,可以添加监控项
想要在新创建的screens中显示tobe02的聚合图形,需要在聚合图形界面点击这个收藏按钮
点击保存报错,不支持中文,把名称改为英文后,正常保存
监控客户机-配置触发器
配置->主机->触发器->创建触发器->添加表达式(结果中的单位为bit)>=1000000(10M)->添加
配置告警过程:
解决中文名称不能写数据库的问题
写入中文名字时不识别
show create table items\G;
在导入前设置字符集
show variables like 'character%'; 可以在my.cnf更改字符集
此处由于已经安装好了,所以导出表数据
mysqldump -uroot -ptobe --default-character-set=utf8 zabbix > zabbix.sqlvim zabbix.sql 编辑导出的sql把latin1改成utf8:1,$s/latin1/utf8/g 查找替换,$表示到最后一行,s表示要查找替换了,/latin1表示需要替换的,/utf8/表示要替换成的内容,g替换所有
导入表数据
mysql -uroot -ptobe --default-character-set=utf8 zabbix < zabbix.sql
此时在回到数据库 show create table items\G;
已经改为utf8
回到页面更改,显示中文
解决图形中文乱码
原因是没有支持中文的字体
搜索: find . -type f -name "*inc*"
字体存放目录 : vim /usr/share/zabbix/include/defines.inc.php
搜索font,注意此处fonts的路径
windows中的字体所在路径,把需要的字体放到桌面,rz到服务器上
并移动到/usr/share/zabbix/assets/fonts目录下先把原来的graphfont.ttf文件改名: mv graphfont.ttf graphfont.ttf.bak做软连接: ln -s ./simfang.ttf graphfont.ttf
此时回到页面显示已正常
zabbix邮件告警
阿里云邮件推送服务阿里云 -> 管理控制台 -> 产品与服务 -> 云通信 -> 邮件推送立即开通 -> 发信域名 -> 新建域名 -> 点击配置到dnspod -> 域名解析-> 添加TXT记录/MX记录/CNAME验证发信地址 -> 新建发信地址 -> 域名/账号/发信类型(触发) -> 设置smtp密码SMTP服务地址: smtpdm.aliyun.com ,SMTP服务端口号:25或80或465(SSL加密)
把阿里云上对应的值写入即可,主机记录为空,写@
阿里云上的状态变为 可使用-未备案 即可继续下一步
创建发信地址和smtp密码
yum install -y expect 生产随机字符串使用mkpasswd -s 0 -l 15 生成密码复制到邮件推送控制台中的发信地址
创建发邮件python脚本
vim mail.py 放到root下就可以
#!/usr/bin/python#coding:utf-8import smtplibfrom email.mime.text import MIMETextimport sysmail_user = 'foutt@tobej.cn' 域名mail_pass = 'xxxxx' smtp密码def send_mail(to_list,subject,content): me = "zabbix 监控告警平台"+"<"+mail_user+">" msg = MIMEText(content, 'plain', 'utf-8') msg['Subject'] = subject msg['From'] = me msg['to'] = to_list try: s = smtplib.SMTP("smtpdm.aliyun.com", 25) s.login(mail_user,mail_pass) s.sendmail(me,to_list,msg.as_string()) s.close() return True except Exception,e: print str(e) return Falseif __name__ == "__main__": send_mail(sys.argv[1], sys.argv[2], sys.argv[3])
给予755权限,否则不会执行此脚本;
chmod 755 mail.py
测试:给邮箱发邮件,进行测试,把标题为测试邮件,内容为my.cnf中的内容发送到foutt7777@163.com
./mail.py foutt7777@163.com "测试邮件" "`cat /etc/my.cnf`"
163邮箱已经收到,测试成功
编辑zabbix配置文件 /etc/zabbix/zabbix_server.conf
vim /etc/zabbix/zabbix_server.conf
找到:AlertScriptsPath=/usr/lib/zabbix/alertscripts
把mail.py 挪到这个目录下来
mv mail.py /usr/lib/zabbix/alertscripts/
cd /usr/lib/zabbix/alertscripts
给它一个755权限 chmod 755 mail.py
设置zabbixWEB UI
1) 设置报警媒介
管理->报警媒介类型->创建媒体类型脚本参数 -> Add {ALERT.SENDTO}/ Add {ALERT.SUBJECT}/Add {ALERT.MESSAGE}
2)设置接收邮件地址
管理->用户->选择admin(或新建)报警媒介->添加,此处的收件人可以添加多个
并确认是否有权限,如果没有权限的话,在用户处选择Zabbix administrators群组,并选择权限中的用户类型
3)配置动作
配置->动作->创建动作设置好名称后,在操作模块->新的->选择发送到的用户->发送到baojing->点击添加恢复操作->新的->选择用户->发送到baojing->点击添加最后点击添加即可
测试报警 :
配置->主机为了实验效果,先停用Zabbix server主机->触发器->故意调整一个触发器 :网卡入口流量,改为<=10000000
监测->问题->选择主机->应用,可以看到报警
邮箱也收到了报警邮件
测试完成后,把触发器恢复为>=10000000,过一会儿会收到已解决邮件
更改发送时间
配置->模板->选择模板->自动发现规则->Network interface discovery的监控项原型->点击Incoming network traffic on {#IFNAME}->更新间隔改为30s
zabbix监控Nginx
配置文件中前面不能有空格
在002上安装Nginx
编辑yum仓库: vim /etc/yum.repos.d/nginx.repo
粘贴:[nginx]name=nginx repobaseurl=http://nginx.org/packages/centos/7/$basearch/gpgcheck=0enabled=1安装: yum install -y nginxsystemctl start nginxvim /etc/nginx/nginx.conf 配置状态信息放到此目录下配置Nginx状态信息vim /etc/nginx/conf.d/default.conf #增加location /nginx_status { stub_status on; access_log off; allow 127.0.0.1; deny all; }
nginx -t检查没有问题
nginx -s reload
进行测试
curl http://127.0.0.1/nginx_status
说明:
字段 | 含义 |
Active Connections | 当前活动连接数,其中也包括了等待状态的连接 |
accepts | 接收到的连接数 |
handled | 已经处理完的连接数,该数字一般和accepts一致,如果不一致那么说明Nginx出错了 |
requests | 总共处理的请求数,一个连接可以有多个请求,所以该值比accpets要大 |
Reading | 正在读取请求头信息的连接数 |
Writing | 正在发送响应报文的连接数 |
Waiting | 处于闲置状态,等待客户端发送请求的连接数 |
在客户端002上,编写监控脚本
vim /usr/local/sbin/ngx_status.sh #内容如下#!/bin/bashurl="http://127.0.0.1/nginx_status"curl=/usr/bin/curl# 检测nginx进程是否存在function ping { /sbin/pidof nginx | wc -l }# 检测nginx性能function active { $curl $url 2>/dev/null| grep 'Active' | awk '{print $NF}'}function reading { $curl $url 2>/dev/null| grep 'Reading' | awk '{print $2}'}function writing { $curl $url 2>/dev/null| grep 'Writing' | awk '{print $4}'}function waiting { $curl $url 2>/dev/null| grep 'Waiting' | awk '{print $6}'}function accepts { $curl $url 2>/dev/null| awk NR==3 | awk '{print $1}'}function handled { $curl $url 2>/dev/null| awk NR==3 | awk '{print $2}'}function requests { $curl $url 2>/dev/null| awk NR==3 | awk '{print $3}'}$1
curl
更改权限 chmod 755 /usr/local/sbin/ngx_status.sh
在客户端002上,编辑zabbix_agent.conf
vi /etc/zabbix/zabbix_agentd.conf # 增加UserParameter=nginx.status[*],/usr/local/sbin/ngx_status.sh $1 用来定义自定义的脚本,如果有多个脚本,就定义多行,执行该脚本后,可以获取到该机器上的某些指标的数值
重启服务
systemctl restart zabbix-agent
zabbix_get 测试
在服务端执行
zabbix_get -s 192.168.183.33 -k 'nginx.status[accepts]'
导入nginx模板
下载模板 https://github.com/aminglinux/linux2019/blob/master/zabbix_nginx_template/zbx_export_templates.xml
配置->模板->导入,把在上面链接复制的内容复制到xml文件中导入->规则不动->导入
监控nginx的状态页
配置->主机->点击需要设置的机器->模板->选择Template App NGINX->添加->更新
zabbix监控Tomcat
监控流程:
1)安装zabbix_java_gateway2)配置zabbix_java_gateway配置文件和zabbix_server配置文件,指定监听端口,启动进程数3)编辑Tomcat配置文件,开启JMX4)添加host,指定JMX interface5)链接TOMCAT模板
服务端001上,安装zabbix_java_gateway
yum install -y zabbix-java-gateway
修改配置文件
vim /etc/zabbix/zabbix_java_gateway.conf 去掉 LISTEN_PORT 和 START_POLLERS 的注释vim /etc/zabbix/zabbix_server.conf 定义 JavaGateway 和 JavaGatewayPort 和 StartJavaPollers启动zabbix-java-gateway服务 systemctl start zabbix-java-gateway重启zabbix-server服务 systemctl restart zabbix-server
开启JMX
vim /usr/local/tomcat/bin/catalina.sh #在#!/bin/sh下增加export CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote-Djava.rmi.server.hostname=192.168.183.3-Dcom.sun.management.jmxremote.port=9999-Dcom.sun.management.jmxremote.ssl=false-Dcom.sun.management.jmxremote.authenticate=false"
重启tomcat,如果启动了需要先停止
/usr/local/tomcat/bin/shutdown.sh /usr/local/tomcat/bin/startup.sh
监听了9999端口
添加Host链接模板
配置->主机->创建主机agent代理程序的接口 -> 移除JMX接口 -> Add -> 192.168.183.3 9999模板-> 选择-> Template App Apache Tomcat JMX -> 添加-> 添加
zabbix监控MySQL
授权一个监控用户
grant usage, process, replication client on *.* to 'mon'@'localhost' identified by 'x2ay9xodTvyM';
编辑配置文件
cat /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
mkdir /var/lib/zabbix 创建目录vim /var/lib/zabbix/.my.cnf #创建一个隐藏的配置文件,内容如下[mysql]host=localhostuser=monpassword='x2ay9xodTvyM'socket=/tmp/mysql.sock[mysqladmin]host=localhostuser=monpassword='x2ay9xodTvyM'socket=/tmp/mysql.sock
可以通过 mysql -umon -px2ay9xodTvyM 看是否能够连接
重启zabbix-agent服务
systemctl restart zabbix-agent
测试
zabbix_get -s 127.0.0.1 -p 10050 -k mysql.ping若提示:sh: mysqladmin: 未找到命令需要做软连接: ln -s /usr/local/mysql/bin/mysqladmin /usr/bin/
zabbix_get -s 127.0.0.1 -p 10050 -k mysql.versionzabbix_get -s 127.0.0.1 -p 10050 -k mysql.size
添加主机和模板
配置->主机->创建主机模板->Template DB MySQL->添加->添加