具体监控命令见此连接:https://my.oschina.net/u/4093217/blog/3036056php
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,这个数字是真正剩余的物理内存大小
模拟一个G的磁盘空间:java
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大小python
挂载后的大小mysql
yum install -y sysstat 安装iostat、sar iotop 当磁盘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/s nload命令 动态的显示网卡实时速度的一个页 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 ens33 tcpdump -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"
作监控的目的:能够提早发现潜在故障隐患,第一时间解决掉,把影响下降。、linux
常见的监控软件:ios
cacti、nagios、zabbix、open-falcon、prometheus、grafana等等nginx
zabbix官网 www.zabbix.com ,进入官网下载(从二进制包安装比较方便快捷)git
yum源安装zabbix :github
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相关组件
须要安装的包:web
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 0
systemctl 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.1 ServerActive=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.ini lnmp的配置文件路径 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.rpm yum 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端口的地址
一、到模板中->建立模板
二、把经常使用的监控项目添加到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.sql vim 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
此时回到页面显示已正常
阿里云邮件推送服务 阿里云 -> 管理控制台 -> 产品与服务 -> 云通讯 -> 邮件推送 当即开通 -> 发信域名 -> 新建域名 -> 点击配置 到dnspod -> 域名解析-> 添加TXT记录/MX记录/CNAME 验证 发信地址 -> 新建发信地址 -> 域名/帐号/发信类型(触发) -> 设置smtp密码 SMTP服务地址: smtpdm.aliyun.com ,SMTP服务端口号:25或80或465(SSL加密)
把阿里云上对应的值写入便可,主机记录为空,写@
阿里云上的状态变为 可以使用-未备案 便可继续下一步
建立发信地址和smtp密码
yum install -y expect 生产随机字符串使用 mkpasswd -s 0 -l 15 生成密码复制到邮件推送控制台中的发信地址
vim mail.py 放到root下就能够
#!/usr/bin/python #coding:utf-8 import smtplib from email.mime.text import MIMEText import sys mail_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 False if __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邮箱已经收到,测试成功
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
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
配置文件中前面不能有空格
在002上安装Nginx
编辑yum仓库: vim /etc/yum.repos.d/nginx.repo
粘贴: [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 enabled=1 安装: yum install -y nginx systemctl start nginx vim /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/bash url="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->添加->更新
监控流程:
1)安装zabbix_java_gateway 2)配置zabbix_java_gateway配置文件和zabbix_server配置文件,指定监听端口,启动进程数 3)编辑Tomcat配置文件,开启JMX 4)添加host,指定JMX interface 5)连接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 -> 添加-> 添加
受权一个监控用户
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=localhost user=mon password='x2ay9xodTvyM' socket=/tmp/mysql.sock [mysqladmin] host=localhost user=mon password='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.version zabbix_get -s 127.0.0.1 -p 10050 -k mysql.size
添加主机和模板
配置->主机->建立主机 模板->Template DB MySQL->添加->添加