Zabbix分布式监控,nginx监控,mysql主从监控,电话告警

分布?p>

郊嗫?/h3>

创建代理proxy节点
更改主机名
hostnamectl   set-hostname  zabbix_proxy
bash
yum 源下载
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
yum clean all
yum  -y  install zabbix-proxy-mysql
安装mysql
yum -y install mysql-community-server   #下载5.7版本的Mysql
初始化mysql
systemctl start mysqld
修改密码策略
vim    /etc/my.cnf
validate-password=OFF
grep "password" /var/log/mysqld.log
重启mysqld
systemctl restart mysqld
修改密码
mysqladmin   -uroot   -p'Tos.sJpXt9tz'  password    '123'
登录数据库
mysql  -p'123'
创建一个数据库:zabbix_proxy库名
create database zabbix_proxy character set utf8 collate utf8_bin;
创建一个用户:zabbix用户名并设置密码
create user zabbix@localhost identified by '123';
授权上面创建的用户的权限:zabbix用户名
grant all on zabbix_proxy.* to 'zabbix'@'%' identified by '123';
刷新授权表
flush privileges; 
导入初始化数据 管道符后写上面的用户名密码,和库名
zcat /usr/share/doc/zabbix-proxy-mysql*/schema.sql.gz | mysql -uzabbix -p123 zabbix_proxy
修改配置文件:
vim /etc/zabbix/zabbix_proxy.conf

ProxyMode=1           将0主动模式改为被动模式1
Server=Server端的ip    因为Proxy是代理端口所以要配Server端
ServerPort=10051      根据个人需要修改,一般可以不改,默认端口是10051,要实现转发的话使用这个选项(zabbix server)
Hostname=Proxy的主机名
ListenPort=10051         默认Port监听端口
SourceIP=proxy端IP       要使用那个ip去agent端去取数据
DBName=数据库库名          proxy端数据库库名
DBUser=授权的数据库用户     
DBPassword=这个用户的数据库密码
DataSenderFrequency=1   #每一秒向Server端发送一次数据
ConfigFrequency=10      #多长时间去服务端拖一次有自己监控的配置
重启服务
systemctl  restart  zabbix-proxy
进入Zabbix页面端
给Server添加代理
管理>agent代理程序>创建代理>根据刚才的设置选择被动式>ip地址输入Proxy端ip>端口10051>添加
选择有agent端的主机修改配置文件
vim  /etc/zabbix/zabbix_agentd.conf
Server=proxy端ip  
ServerActive=proxy端ip
Hostname=agent主机名
重启服务
systemctl  restart  zabbix-agent
给一个主机设置代理程序
配置>主机>创建主机>客户端地址选择agent端的ip>代理程序监测选择设置的Proxy

Zabbix监控Nginx

首先更改Nginx的子配置文件打开监控选项
vim  /etc/nginx/conf.d/*.conf
server {
        listen 80;
        server_name localhost;
     location   / {
                root /usr/share/nginx/html;
                index index.html index.hml;
                }
     location  /nginx-status{
                stub_status     on;
                access_log  /var/log/nginx/access.log;
}
}
检查有没有这个模块:nginx -V
如果没有此模块,需要重新安装,编译命令如下:./configure –with-http_stub_status_module
nginx -s reload
进行命令测试:
curl  监控nginx的IP/nginx-status
返回:
Active connections: 6
server accepts handled requests
89508   89508   173945 
Reading: 3 Writing: 2 Waiting:1

Active connections: 6 =当前连接数
accepts(已经接受的请求数 )   handled(已处理请求数)  requests(总请求数)   Dropped(已丢弃,计算得出)
89508  =已经接受的请求数       89508 =已经处理请求数   173945 =总请求数
Reading: 3 =当前正在读的请求   Writing: 2 =当前正在写的请求   Waiting:1 =当前正在等待的请求
在agent端设置自定义参数
vim   /etc/zabbix/zabbix_agentd.d/*.conf
UserParameter=跟监控项有关系的自定键值名,curl -s  监控nginx的IP/nginx-status |awk 'NR==1{print $NF}'
UserParameter=键值名,curl -s  监控nginx的IP/nginx-status |awk 截取
重启agent端:systemctl  restart   zabbix-agent
在Server端测试时选择你要监控的那条数据:zabbix_get -s 10.12.153.224 -p 10050 -k "memory.haha[Buffers]"
zabbix_get -s agent端ip -p 10050 -k "键值名"
页面中设置:
配置>模板>创建模板>创建监控项>键值选自定义键值>那个有Nginx给链接新模板>
补充
查看Nginx并发进程数:ps -ef | grep nginx | wc -l
查看Web服务器TCP连接状态:netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
LISTEN:侦听来自远方的TCPport的连接请求
SYN-SENT:再发送连接请求后等待匹配的连接请求
SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认
ESTABLISHED:代表一个打开的连接
FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN-WAIT-2:从远程TCP等待连接中断请求
CLOSE-WAIT:等待从本地用户发来的连接中断请求
CLOSING:等待远程TCP对连接中断的确认
LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认
TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认
CLOSED:没有不论什么连接状态
商业版的 nginx plus 通过他的 ngx_http_status_module 提供了比 nginx 更多的监控指标,可以参看 http://demo.nginx.com/status.html
nginx 日志分析
nginx 的日志 中可以记录很多有价值的信息,通过分析 日志,可以收集到很多指标
python 编写的 linux 工具 ngxtop 就实现了对 日志的分析功能
1.制作nginx的日志切割,每天凌晨切割并压缩。
PV:PV([访问量](https://www.baidu.com/s?wd=%E8%AE%BF%E9%97%AE%E9%87%8F&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao)): 即Page View, 即页面浏览量或[点击量](https://www.baidu.com/s?wd=%E7%82%B9%E5%87%BB%E9%87%8F&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao),用户每次刷新即被计算一次。
UV:UV(独立访客):即Unique Visitor,访问您网站的一台[电脑客户端](https://www.baidu.com/s?wd=%E7%94%B5%E8%84%91%E5%AE%A2%E6%88%B7%E7%AB%AF&tn=SE_PcZhidaonwhc_ngpagmjz&rsv_dl=gh_pc_zhidao)为一个访客。00:00-24:00内相同的客户端只被计算一次。

#sodu提权给/etc/sudoers添加这个用户
visudo   或者  vim  /etc/sudoers
101行添加    zabbix的用户名       ALL=(ALL)       NOPASSWD: ALL
vim  /etc/zabbix/zabbix_agentd.conf
93行      EnableRemoteCommands=1
101行     LogRemoteCommands=1
重启服务:     systemctl restart zabbix-agent

1.根据访问IP统计UV
sudo  awk '{print $1}'  access.log|sort | uniq -c |wc -l
2.统计访问URL统计PV
sudo  awk '{print $7}' access.log|wc -l
3.查询访问最频繁的URL
sudo  awk '{print $7}' access.log|sort | uniq -c |sort -n -k 1 -r|more
4.查询访问最频繁的IP
sudo  awk '{print $1}' access.log|sort | uniq -c |sort -n -k 1 -r|more
5.查询访问最频繁的前10的IP
sudo  awk '{print $1}' access.log|sort | uniq -c |sort -n -k 1 -r|head -n 10

Mysql的主从监控

1,首先准备好配置完主从的数据库并在从库设置agent端
2,在从库在命令行查看主从状态:SQL线程和IO线程位两个Yes
mysql  -uroot -p'123'  -e 'show   slave  statusG'
3,进行截取
mysql  -uroot -p'123'  -e 'show   slave  statusG' 2>/dev/null |grep "Slave_IO_Running" |awk '{print $2}'
mysql  -uroot -p'123'  -e 'show   slave  statusG' 2>/dev/null |grep "Slave_SQL_Running" |awk 'NR==1{print $2}'
4,写个脚本来判断是否为YES
#!/bin/bash
IO=$(mysql  -uroot -p'123'  -e 'show   slave  statusG' 2>/dev/null |grep "Slave_IO_Running" |awk '{print $2}')

SQL=$(mysql  -uroot -p'123'  -e 'show   slave  statusG' 2>/dev/null |grep "Slave_SQL_Running" |awk 'NR==1{print $2}')

if [ "$SQL" = "Yes" -a "$IO" = "Yes" ]   #判断这两个变量是否等于Yes
	then 
		echo 1		#如果等于Yes那就打印1
	else
		echo 0      #否则就打印0
fi
创建完成后给这个脚本添加一个可执行权限:
chmod   +x  /etc/zabbix/zabbix_agentd.d/脚本名
5,定义自定义键值
vim  /etc/zabbix/zabbix_agentd.d/*.conf
UserParameter=自定义键值名,/etc/zabbix/zabbix_agentd.d/*.sh
UserParameter=自定义键值名,脚本路径
6,重启服务
systemctl  restart  zabbix-agent
7,在Server端检查键值是否成功
zabbix_get -s agent端ip -p 10050 -k "键值名"
8,成功以后去页面端配置监控项

Zabbix电话告警

1,注册睿象云https://www.aiops.com/
智能告警平台>集成>监控工具>ZABBIX>设置名称并保存获取应用key>
2,Server端进行配置
1,在配置文件中查找这个可执行脚本的目录
   vim  /etc/zabbix/zabbix_server.conf
   AlertScriptsPath=/usr/lib/zabbix/alertscripts
2,cd   /usr/lib/zabbix/alertscripts
3,wget https://download.aiops.com/ca_agent/zabbix/ca_zabbix_release-4.0.3.tar.gz
4,tar -xzf ca_zabbix_release-4.0.3.tar.gz
5,cd cloudalert/bin
6,bash install.sh d08883958947490bbd6b51ed7369c60f   #应用key
7,输入Server端地址:http://ip
8,输入账号密码:Admin   zabbix
3,在zabbix页面配置报警类型和报警用户,并和触发器关联
类型选择Cloud Alert Media  随便写一个收件人
4,进入睿象云平台
配置>分派策略>分派人发送给那个用户>通知测略>新建>通知对象选择
5,在zabbix页面配置触发器动作
配置>动作>触发器动作>选择需要告警的主机>操作>发送消息>发送用户选择>Cloud Alert User>仅送到>Cloud Alert Media>恢复操作一样