码迷,mamicode.com
首页 > 其他好文 > 详细

zabbix分布式监控

时间:2020-10-08 18:43:19      阅读:16      评论:0      收藏:0      [点我收藏+]

标签:客户端安装   说明   $2   目录   local   读写   erro   0 rows   follow   

分布式集群监控过程
分布式集群监控部署说明
本次监控实施采用分布式集群架构,一个Server端,多个Proxy端。Proxy负责终端数据的采集、监控策略下发和数据上报,Server端负责数据的集中存储、展示、和告警。通过该监控方案可以很好的实现跨机房的集中监控。监控小组成员负责实施的内容主要有:Proxy部署、Agent部署和Template模版配置。本文档作为实施参考。

注意:监控客户端部署只需要完成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

设置环境变量,在/etc/profile最后一行添加如下内容,保存退出:

PATH=$PATH:/usr/local/mysql/bin
[root@zabbix-proxy mysql]$ source /etc/profile

使用刚才系统生成的密码登陆mysql,并修改密码

[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和测试
重要:启动前再次确认下配置文件是否已经按照要求修改,是否修改了默认监听端口

centos7

systemctl start zabbix-agent
systemctl enable zabbix-agent

centos6.9

service zabbix-agent start
chkconfig --add zabbix-agent
chkconfig zabbix-agent on
测试:(在代理服务器安装 zabbix-get来测试是否可以正常获取客户端数据):

以下内容是在代理服务器上操作

yum -y install zabbix-get

测试使用zabbix默认key可否获取到数值

[root@zabbix-proxy ~]# zabbix_get -s 10.0.6.121 -p 18629 -k "system.uptime"
3489781

测试使用自定义key可否获取数值

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":

Iterate over all block devices, but ignore them if they are in the

# 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

Server B process discovery

Auth: RobbieHan

Date: 2019-09-02

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

system process CPU&MEM use information

Auth: RobbieHan

Date: 2019-09-02

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

system process CPU&MEM use information

Auth: RobbieHan

Date: 2019-09-02

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

zabbix分布式监控

标签:客户端安装   说明   $2   目录   local   读写   erro   0 rows   follow   

原文地址:https://blog.51cto.com/13420391/2540292

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!