标签:top disco 不能 orm welcome 修改主机名 status and mysqld
分布式集群监控过程注意:监控客户端部署只需要完成2.1-2.5操作步骤即可,修改客户端配置文件指向对应的Proxy地址
1 Proxy代理部署
1.1 Proxy系统环境
每期网络部署一台Proxy作为监控代理,负责数据的采集、临时存储、数据上报和策略下发。Proxy系统环境如下:
系统类型:Linux
系统版本:Centos7
系统配置:2核\4G\280G(其中200G是独立磁盘,挂载到/data分区)
系统初始装完成后,进行必要的系统参数优化,保持系统环境一致性。
新建的虚拟机请确认不要和原有地址冲突,主机统一放到运维管理分组,加入堡垒机去访问,代理端不需要对外做任何的端口映射。
修改主机名:zabbix-proxy.phase06.com
注意:Proxy主机位于几期网络,phase后面的数字就是几,上面是6期代理主机的命名。
1.2 Proxy软件环境
zabbix Proxy 和 Zabbix server 都是需要安装数据库的,所有监控代理的软件环境包括:
数据库:mysql-5.7.24
监控代理: zabbix-proxy-4.0.10
1.3 Mysql安装配置
1、卸载mariadb:centos7默认会安装mariadb,先确认下,如果有安装,卸载即可:
[root@zabbix-proxy]$ rpm -qa |grep mariadb
mariadb-libs-5.5.60-1.el7_5.x86_64
[root@zabbix-proxy]$ yum remove mariadb-libs-5.5.60-1.el7_5.x86_64
2、创建mysql启动用户、下载mysql文件、安装数据库、创建数据库、设置数据库等:
[root@zabbix-proxy ~]$ useradd mysql -s /sbin/nologin -M
[root@zabbix-proxy ~]$ cd /usr/local/src
[root@zabbix-proxy src]$ wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz
[root@zabbix-proxy src]$ tar -zvxf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz
[root@zabbix-proxy src]$ mv mysql-5.7.24-linux-glibc2.12-x86_64 /usr/local/mysql-5.7.24
[root@zabbix-proxy src]$ ln -s /usr/local/mysql-5.7.24/ /usr/local/mysql
[root@zabbix-proxy src]$ cd /usr/local/mysql
[root@zabbix-proxy src]$ yum install libaio* -y
[root@zabbix-proxy mysql]$ mkdir -p /data/mysql
[root@zabbix-proxy mysql]$ chown -R mysql.mysql /data/mysql
[root@zabbix-proxy mysql]$ bin/mysqld --initialize --user=mysql --datadir=/data/mysql
执行完以上操作后,屏幕会打印出数据库连接的初始密码:root@localhost: ?dFToaus7BIp
把root@localhost:后面的字符串记录下来,这个就是数据库初始密码。
3、拷贝启动文件和添加配置文件:
[root@zabbix-proxy mysql]$ cp support-files/mysql.server /etc/init.d/mysqld
[root@zabbix-proxy mysql]$ vim /etc/my.cnf
[clinet]
default-character-set=utf8
[mysqld]
datadir=/data/mysql
#socket=/var/lib/mysql/mysql.sock
collation-server = utf8_unicode_ci
character_set_server=utf8
init_connect=‘SET NAMES utf8‘
symbolic-links=0
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql]
default-character-set=utf8
4、启动mysql,添加开机启动,修改密码:
[root@zabbix-proxy mysql]$ service mysqld start
[root@zabbix-proxy mysql]$ chkconfig --add mysqld
[root@zabbix-proxy mysql]$ chkconfig mysqld on
[root@zabbix-proxy mysql]$ vim /etc/profile
PATH=$PATH:/usr/local/mysql/bin
[root@zabbix-proxy mysql]$ source /etc/profile
[root@zabbix-proxy mysql]$ mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.24
mysql> alter user ‘root‘@‘localhost‘ identified by ‘1234@abcd.com‘;
Query OK, 0 rows affected (0.00 sec)
1234@abcd.com 是我们的新密码,退出mysql,然后重新连接就可以使用新密码登陆了。
5、创建mysql.sock软连接:
[root@zabbix-proxy ~]$ rpm -ivh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
[root@zabbix-proxy ~]$ yum -y install zabbix-proxy-mysql
[root@zabbix-proxy ~]$ zabbix_proxy -V # 确认版本是4.0.10
zabbix_proxy (Zabbix) 4.0.10
1.4 zabbix-proxy安装和配置
1、安装zabbix-proxy:
[root@zabbix-proxy ~]$ rpm -ivh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
[root@zabbix-proxy ~]$ yum -y install zabbix-proxy-mysql
[root@zabbix-proxy ~]$ zabbix_proxy -V # 确认版本是4.0.10
zabbix_proxy (Zabbix) 4.0.10
2、创建数据库:
[root@zabbix-proxy ~]# mysql -uroot -p
Enter password:
mysql> create database zabbix_proxy;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on zabbix_proxy.* to ‘zabbix‘@‘localhost‘ identified by ‘zabbix‘;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> exit
创建了数据库:zabbix_proxy并授权给用户 zabbix 通过密码zabbix 本地访问。
3、导入zabbix-proxy初始数据:
[root@zabbix-proxy ~]$ zcat /usr/share/doc/zabbix-proxy-mysql*/schema.sql.gz | mysql -uzabbix -p zabbix_proxy
Enter password:
[root@zabbix-proxy ~]$
使用刚才创建的用户zabbix 导入zabbix-proxy数据库文件,输入密码:zabbix,完成导入工作,你也可连接数据库,查看导入的数据表,确认是否导入成功。
4、修改配置文件
zabbix-proxy配置文件路径:/etc/zabbix/zabbix_proxy.conf
[root@zabbix-proxy]$ echo ‘‘ > /etc/zabbix/zabbix_proxy.conf
[root@zabbix-proxy]$ vim /etc/zabbix/zabbix_proxy.conf
ProxyMode=0
Server=173.248.244.3 # Server地址
ServerPort=8191 # Server端口
Hostname=zabbix-proxy.phase06.com # 重要!Server端接收数据是要匹配Hostname的
LogFile=/var/log/zabbix/zabbix_proxy.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_proxy.pid
SocketDir=/var/run/zabbix
DBName=zabbix_proxy # 数据库名
DBUser=zabbix # 数据库用户
DBPassword=zabbix # 数据库密码
ProxyLocalBuffer=1 # 数据上传后本地保存时间(1-720/小时)
ProxyOfflineBuffer=24 # 未上传数据本地保存时间(1-720/小时)
ConfigFrequency=600 # 配置文件同步时间间隔(秒)
DataSenderFrequency=1
StartPollers=5
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000
注意:配置文件中的Hostname和Server端的代理配置保持一致,不然数据不能正常上报,所以,在完成代理配置后,把这个字段内容告诉我,我来加到Server端。你也可以在配置文件中使用HostnameItem=system.hostname 来替换Hostname,这样zabbix-proxy会读取系统hostname来作为配置内容。
5、启动zabbix-proxy
[root@zabbix-proxy ~]$ systemctl start zabbix-proxy
如果启动报错,查看错误信息,根据错误提示进行排查。没报错,查看端口 10051是否已监听。如果服务启动成功,看下日志:
[root@zabbix-proxy ~]$ tail -f /var/log/zabbix/zabbix_proxy.log
17211:20190710:194811.919 cannot send proxy data to server at "173.248.244.3": proxy "zabbix-proxy.phase06.com" not found
因为Server端没有添加该代理配置,所有日志里面会显示上面内容。
添加开机启动:
[root@zabbix-proxy ~]$ systemctl enable zabbix-proxy
2 Agent安装配置
2.1 安装zabbix-agent
客户端安装和proxy安装类似,需要先安装yum 源,需要注意的是centos6.9 和centos7系统使用的源是不同的:
RHEL7:
rpm -ivh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
RHEL6:
rpm -ivh https://repo.zabbix.com/zabbix/4.0/rhel/6/x86_64/zabbix-release-4.0-1.el6.noarch.rpm
安装zabbix-agent:
yum -y install zabbix-agent
注意:确认系统版本,使用不同源;安装zabbix-agent前,先确认是否已经安装过不同版本的客户端,如有请先卸载掉;安装完不要着急启动,zabbix-agent使用的默认端口,和我们线上业务冲突,切记,不要启动,不然死翘翘了。
2.2 zabbix-agnet配置:
使用下面内容替换掉zabbix-agent客户端默认配置文件(/etc/zabbix/zabbix_agentd.conf), 其中Server 和 ServerActive设置成对应Proxy代理地址
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=10.0.5.102
ServerActive=10.0.5.102
HostnameItem=system.hostname
Include=/etc/zabbix/zabbix_agentd.d/*.conf
ListenPort=18629
2.3 tcp status 监控配置:
Proxy上报客户端时默认都是会绑定Tcp状态监控模版,需要客户端需要配置脚本来采集Tcp状态数据,脚本文件如下:
监控脚本(脚本存放路径:/usr/local/bin/tcp_status.sh)
#!/bin/bash
function SYNRECV {
/usr/sbin/ss -s |grep ‘synrecv‘|awk -F, ‘{print $4}‘|awk ‘{print $2}‘
}
function ESTAB {
/usr/sbin/ss -ant | awk ‘{++s[$1]} END {for(k in s) print k,s[k]}‘ | grep ‘ESTAB‘ | awk ‘{print $2}‘
}
function FINWAIT1 {
/usr/sbin/ss -ant| grep ‘FIN-WAIT-1‘|wc -l
}
function FINWAIT2 {
/usr/sbin/ss -ant| grep ‘FIN-WAIT-2‘ | wc -l
}
function TIMEWAIT {
/usr/sbin/ss -ant | grep ‘TIME-WAIT‘ | wc -l
}
function LASTACK {
/usr/sbin/ss -ant | grep ‘LAST-ACK‘ | wc -l
}
function LISTEN {
/usr/sbin/ss -ant | grep ‘LISTEN‘ | wc -l
}
$1
添加脚本执行权限:chmod +x /usr/local/bin/tcp_status.sh
添加zabbix agent配文件调取脚本执行(/etc/zabbix/zabbix_agentd.d/tcp-status-params.conf)
UserParameter=tcp.status[*],/usr/local/bin/tcp_status.sh $1
2.4 启动angent和测试
重要:启动前再次确认下配置文件是否已经按照要求修改,是否修改了默认监听端口
systemctl start zabbix-agent
systemctl enable zabbix-agent
service zabbix-agent start
chkconfig --add zabbix-agent
chkconfig zabbix-agent on
测试:(在代理服务器安装 zabbix-get来测试是否可以正常获取客户端数据):
yum -y install zabbix-get
[root@zabbix-proxy ~]# zabbix_get -s 10.0.6.121 -p 18629 -k "system.uptime"
3489781
zabbix_get -s 10.0.6.121 -p 18629 -k "tcp.status[ESTAB]"
完成以上配置,测试无问题,agent就可以自动上报数据给proxy,proxy同步配置到客户端,然后采集数据,上报给服务端,服务端会自动匹配规则,关联模版,生成监控图表。
2.5 磁盘性能监控
添加磁盘自动发现脚本(脚本存放路径:/usr/local/bin/lld-disks.py):
#!/usr/bin/python
import os
import json
if name == "main":
# skippable set
skippable = ("sr", "loop", "ram")
devices = (device for device in os.listdir("/sys/class/block")
if not any(ignore in device for ignore in skippable))
data = [{"{#DEVICENAME}": device} for device in devices]
print(json.dumps({"data": data}, indent=4))
添加脚本执行权限:chmod +x /usr/local/bin/lld-disks.py
添加zabbix agent配文件(/etc/zabbix/zabbix_agentd.d/userparameter_diskstats.conf)
UserParameter=custom.vfs.discover_disks,/usr/local/bin/lld-disks.py
UserParameter=custom.vfs.dev.read.ops[],awk ‘{print $$1}‘ /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.read.merged[],awk ‘{print $$2}‘ /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.read.sectors[],awk ‘{print $$3}‘ /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.read.ms[],awk ‘{print $$4}‘ /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.write.ops[],awk ‘{print $$5}‘ /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.write.merged[],awk ‘{print $$6}‘ /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.write.sectors[],awk ‘{print $$7}‘ /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.write.ms[],awk ‘{print $$8}‘ /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.io.active[],awk ‘{print $$9}‘ /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.io.ms[],awk ‘{print $$10}‘ /sys/class/block/$1/stat
UserParameter=custom.vfs.dev.weight.io.ms[*],awk ‘{print $$11}‘ /sys/class/block/$1/stat
磁盘监控指标是从/sys/block/下对应分区目录下stat文件中取的监控数值,该文件一共有9列数值,例如:
[root@proxy ~]# cat /sys/class/block/vda1/stat
675 244 24172 1328 7 1 28 22 0 1081 1350
这些指标分别对应的自定义key和指标意义说明:
第一个(custom.vfs.dev.read.ops):磁盘成功完成读的次数;
第二个(custom.vfs.dev.read.merged):合并读完成次数,为了提高效率系统会对相邻的读写进行合并;
第三个(custom.vfs.read.sectors):读扇区的次数,成功读扇区的次数;
第四个(custom.vfs.dev.read.ms):所有读操作花费的毫秒数;
第五个(custom.vfs.dev.write.ops):成功写完成的次数;
第六个(custom.vfs.dev.write.merged):合并写完成次数;
第七个(custom.vfs.dev.write.sectors):写扇区次数;
第八个(custom.vfs.dev.write.ms):所有写操作所花费的毫秒数;
第九个(custom.vfs.dev.io.active):正在处理的输入/输出请求数;
第十个(custom.vfs.dev.io.ms):输入/输出操作花费的毫秒数,----花在I/O操作上的毫秒数,只要第九个不为0,这个域就会增长;
第十一个(custom.vfs.dev.weight.io.ms):输入/输出操作花费的加权毫秒数 ----- 加权, 花在I/O操作上的毫秒数,在每次I/O开始,I/O结束,I/O合并时这个域都会增加。
==为了让配置生效,记得重启zabbix-agent==
2.6 B端程序主要进程的自动发现与监控:
实现目标:通过脚本自动发现B端主要程序进程(db、gateway、hall),并对进程进行监控,通过自动发现模版可以自动发现B端程序多进程数据,并完对单个进程的系统性能消耗监控。
添加B端进程自动发现脚本(脚本存放路径:/usr/local/bin/discovery_process.py)
#!/usr/bin/python
import os
import re
import json
if name == "main":
pattern = ‘gateway[0-9]+|db[0-9]+|hall[0-9]+|globalhall‘
processes = (process for process in os.listdir("/home/publish/server/game_server/tmp")
if re.findall(pattern, process))
data = [{"{#PROCESSNAME}": process} for process in processes]
print(json.dumps({"data": data}, indent=4))
添加脚本执行权限: chmod +x /usr/local/bin/discovery_process.py
B端进程CPU和内存使用情况统计脚本(/usr/local/bin/process_status.sh)
方式1:使用ps取值
#!/bin/bash
name=$1
process=$2
function memuse {
ps aux|grep ${process}|grep -Ev "grep ${process}|process_status.sh" |awk ‘{print $4}‘|head -n1
}
function cpuuse {
ps aux|grep ${process}|grep -Ev "grep ${process}|process_status.sh" |awk ‘{print $3}‘|head -n1
}
case $name in
mem)
memuse
;;
cpu)
cpuuse
;;
*)
echo -e "Usage: $0 [mem|cpu] [process]"
esac
方式2:使用获取进程ID通过top取值
#!/bin/bash
name=$1
process=$2
processPID=$(ps aux|grep ${process}|grep -Ev "grep ${process}|process_status.sh" |awk ‘{print $2}‘|head -n1)
function memuse {
top -b -n1 |grep ${processPID}| grep -Ev ‘grep|process_status.sh‘|awk ‘{print $10}‘
}
function cpuuse {
top -b -n1 |grep ${processPID}| grep -Ev ‘grep|process_status.sh‘|awk ‘{print $9}‘
}
case $name in
mem)
memuse
;;
cpu)
cpuuse
;;
*)
echo -e "Usage: $0 [mem|cpu] [process]"
esac
添加脚本执行权限:chmod +x /usr/local/bin/process_status.sh
添加zabbix agent配文件(/etc/zabbix/zabbix_agentd.d/process_status.conf)
UserParameter=discovery.process,/usr/local/bin/discovery_process.py
UserParameter=process.status[*],/usr/local/bin/process_status.sh $1 $2
可以使用Ansible自动化脚本完成文档中2.1到2.5部署过程:
监控客户端自动化部署脚本下载地址:
https://github.com/RobbieHan/sandbox_roles/tree/master/zabbix
标签:top disco 不能 orm welcome 修改主机名 status and mysqld
原文地址:https://blog.51cto.com/13420391/2540293