Zabbix概述
- Agent被动模式:server端主动找angent端要数据,但是此模式大量消耗server资源(CPU、MEM、进程等)。150+台Agent端以后,就要把被动模式改为主动模式,降低server端压力。
- Agent主动模式:每隔一段时间,主动的把数据传给server端。
分布式:当Agent端过大,并且,已经是Agent主动模式了,server端压力过大了,就好采用分布式。
- Zabbix-proxy:假如有多个IDC机房,那么每个机房都有一个Zabbix-proxy和数据库,Agent会把数据优先发给proxy,然后proxy把数据发到本地数据库做临时存储,然后在统一发给server端。
组件:
- Zabbix Server:负责接受agnet发送的报告信息的核心组件,所有配置,统计数据及操作数据均由其主旨进行
- Database Storage:专用于存储所有配置信息,以及由zabbix收集的数据
- Web interface:zabbix的GUI接口,通常与Server运行在同一台主机上;
- Proxy:可选组件,常用于分布监控环境中,代理Server收集部分被监控端的监控数据,统一发送
- Agent:部署在被监控主机上,负责收集本地数据并发往Server端或Proxy端。
进程:
- zabbix_agentd:客户端的守护进程,此进程收集客户端数据,例如cpu负载,内存,硬盘使用情况等
- zabbix_get:zabbix工具,单独使用的命令,通常在server或proxy端执行获取远程客户端信息的命令。通常用户排错。例如server端获取不到客户端的内存数据,我们可以使用zibbix_get获取客户端的方式来做故障排查
- zabbix_sender:zabbix工具,用于发送数据给server或proxy,通常用于耗时比较长的检查,很多检查非常耗时间,导致zabbix超时,于是我们在脚本执行完毕后,使用sender主动提交数据。
- zabbix_server:zabbix服务端守护进程。zabbix_angetd,zabbix_get,zabbix_sender,zabbix_proxy,zabbix_java_gateway的数据最终都提交给server
- zabbix_proxy:zabbix代理守护进程,功能类似server,唯一不同的时他只是给中转站,他需要把收集到的数据提交/被提交到server端
- zabbix_java_gateway:zabbix2.0之后引入了一个功能,顾名思义:java网关,类似agentd,但是只用于Java方面,需要特别注意的是,他只能主动去获取数据,而不能被动获取数据,他的数据最终hui’ga会给server或proxy端。
相关术语:
- 主机
- 主机组
- 监控项(item):只负责监控不做任何数据分析。每个item都有“key”标识,就像我们的摄像头。
- 触发器(tirgger):用于评估被监控的对象是否在合理范围内,进行判断。就像我们的法律。
- 事件(event):触发一个值得关注的事情,比如触发器状态转变,新的agent或重新上线的agent的自动注册等,就像触犯法律。
- 动作(action):对特定事件事先定义的处理方法,如发送通知,合适执行操作,就像我们的警察通过看监控根据法律,发现有人触犯法律,准备开始抓人了,就是关联告警和具体的报警媒介。
- 报警媒介(media):发送通知的手段或通道如Email,Jabber或SMS等,就像警察抓人手段。
- 模板(template):用于快速定义被监控主机的预设条目集合,通常包含了item,trigger,graph,screen,application,low-lever discovery rule等,模板可以直接链接到某个主机;
- 前端(frontend):Zabbix的web接口
注: 动作模块默认发给所有人,但是需要用户功能模块确定是否接收报警邮件(用户自己决定),否则虽然动作模块发送了,用户也接受不到
配置Zabbix-Server Zabbix-agent-nginx(只安装nginx)
本地定制yum源
#本地定制yum源--命令集
mkdir rpm
mount /dev/sr0 /media/cdrom
yum -y install createrepo
createrepo -v .
cat > /etc/yum.repos.d/yum.repo << qqq
[local]
name=local
baseurl=file:///media/cdrom
gpgcheck=0
enabled=1
[rpm]
name=rpm
baseurl=file:///root/rpm
gpgcheck=0
enabled=1
qqq
yum -y clean all
yum makecache
yum -y install pcre pcre-devel zlib-devel libaio libaio-devel libxml2 libxml2-devel bzip2-devel openssl openssl-devel net-snmp-devel net-snmp curl-devel gd gcc gcc-c++ make libjpeg-devel libpng-devel libcurl-devel perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker mysql-devel net-snmp-utils
#如果下一步出现问题,请注释掉yum配置文件里的本地光盘源
cat > /etc/yum.repos.d/yum.repo << qqq
#[local]
#name=local
#baseurl=file:///media/cdrom
#gpgcheck=0
#enabled=1
[rpm]
name=rpm
baseurl=file:///root/rpm
gpgcheck=0
enabled=1
qqq
yum -y clean all
yum makecache
yum -y install libvpx-devel gd-devel
编译安装LNMP Zabbix
安装nginx
#命令集————安装 -----具体解释看Nginx
tar xf /root/nginx-1.10.2.tar.gz -C /usr/src
cd /usr/src/nginx-1.10.2/
##一个服务器搭建,nginx和php程序用户要相同
useradd -M -s /sbin/nologin lnmp
./configure --user=lnmp --group=lnmp --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make && make install
ln -s /usr/local/nginx/sbin/* /usr/local/sbin
cd /usr/local/nginx/conf/
egrep -v "#|^$" nginx.conf.default > nginx.conf
#将Nginx配置文件改成如下内容
[root@moban6 conf]# vim nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
server_name localhost;
location / {
root html;
index index.php index.html index.htm;
}
location = /nginx-status {
stub_status on;
access_log off;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
[root@moban6 conf]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
安装MySQL
#命令集
tar xf /root/mysql-5.5.32-linux2.6-x86_64.tar.gz -C /usr/local
useradd -s /sbin/nologin -M mysql
cd /usr/local/mysql-5.5.32-linux2.6-x86_64/
/bin/cp support-files/my-small.cnf /etc/my.cnf
ln -s /usr/local/mysql-5.5.32-linux2.6-x86_64 /usr/local/mysql
chown -R mysql.mysql /usr/local/mysql
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
/bin/cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
/etc/init.d/mysqld start
ln -s /usr/local/mysql/bin/* /usr/local/bin
mysqladmin -uroot password '123123'
安装libmcrypt
#命令集
tar xf /root/libmcrypt-2.5.8.tar.gz -C /usr/src
cd /usr/src/libmcrypt-2.5.8/
./configure && make && make install
安装GD
#命令集
tar xf /root/GD-2.18.tar.gz -C /usr/src/
cd /usr/src/GD-2.18/
perl Makefile.PL && make && make install
安装PHP
#命令集
tar xf /root/php-5.6.30.tar.gz -C /usr/src
cd /usr/src/php-5.6.30
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-bz2 --with-curl --enable-sockets --disable-ipv6 --with-gd --with-jpeg-dir=/usr/local --with-png-dir=/usr/local --with-freetype-dir=/usr/local --enable-gd-native-ttf --with-iconv-dir=/usr/local --enable-mbstring --enable-calendar --with-gettext --with-libxml-dir=/usr/local --with-zlib --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-mysql=mysqlnd --enable-dom --enable-xml --enable-fpm --with-libdir=lib64 --enable-bcmath && make && make install
#创建php配置文件
cp /usr/src/php-5.6.30/php.ini-development /usr/local/php/etc/php.ini
#修改php配置文件php.ini
[root@zabbix-server php-5.6.30]# cat -n /usr/local/php/etc/php.ini |sed -n '372p;382p;393p;660p;702p;820p;936p;'
372 max_execution_time = 300
382 max_input_time = 300
393 memory_limit = 256M
660 post_max_size = 32M
702 always_populate_raw_post_data = -1
820 upload_max_filesize = 16M
936 date.timezone =Asia/Shanghai
#创建php-fpm配置文件
[root@zabbix-server php-5.6.30]# cd /usr/local/php/etc/
[root@zabbix-server etc]# cp php-fpm.conf.default php-fpm.conf
[root@zabbix-server etc]# cat -n php-fpm.conf |sed -n '149,150p'
149 user = lnmp
150 group = lnmp
安装zabbix server端
#安装zabbix server命令集
useradd -s /sbin/nologin -M zabbix
tar xf /root/zabbix-3.2.4.tar.gz -C /usr/src/
cd /usr/src/zabbix-3.2.4/
./configure --prefix=/usr/local/zabbix --with-mysql --with-net-snmp --with-libcurl --enable-server --enable-agent --enable-proxy --with-libxml2 && make && make install
#由于zabbix启动脚本路径默认指向是/usr/local/sbin路径,因此需要提前建立软连接
ln -s /usr/local/zabbix/sbin/* /usr/local/sbin/
ln -s /usr/local/zabbix/bin/* /usr/local/bin/
#配置zabbix的MySQL环境
#Zabbix server和MySQL安装到一台服务器上,首先需要手动创建zabbix数据库
#设定中文字符集
mysql -uroot -p123123 -e 'create database zabbix character set utf8;'
#创建库
mysql -uroot -p123123 -e "grant all privileges on zabbix.* to zabbix@'localhost' identified by '123123';"
#刷新
mysql -uroot -p123123 -e 'flush privileges;'
#如下数据的导入顺序不可以错
mysql -uzabbix -p123123 zabbix < /usr/src/zabbix-3.2.4/database/mysql/schema.sql
mysql -uzabbix -p123123 zabbix < /usr/src/zabbix-3.2.4/database/mysql/images.sql
mysql -uzabbix -p123123 zabbix < /usr/src/zabbix-3.2.4/database/mysql/data.sql
安装Zabbix web GUI
- Zabbix web 是php编写的,所以需要由php环境
- 默认nginx的安装的根目录是/usr/local/nginx/html。所以只要Zabbix web代码放到此目录即可
- Zabbix web代码在Zabbix源码包中的frontends/php目录下,将这个php目录拷贝到/usr/local/nginx/html/目录下并改名zabbix即可完成Zabbix web端安装
- 在浏览器输入http://IP/zabbix,然后会检查zabbix web运行环境是否满足, 并提供连接数据库的相关信息即可,最后将链接数据库相关信息都存入文件
- 默认的zabbix平台用户名为Admin,密码为zabbix
#安装命令集
#复制Zabbix web目录到nginx web根目录下
cp -rp /usr/src/zabbix-3.2.4/frontends/php/ /usr/local/nginx/html/zabbix
#修改属主属组,改为nginx的程序用户lnmp(安装nginx时创建的)
cd /usr/local/nginx/html/
chown -R lnmp.lnmp zabbix
#启动nginx服务和php-fpm
/usr/local/nginx/sbin/nginx
/usr/local/php/sbin/php-fpm
#登陆web根据提示生成zabbix.conf.php配置文件
#起初并没有zabbix.conf.php.我们可以选择自动生成配置文件
#先查看一下,发现并没有,也可以vim自己添加
[root@zabbix-server html]# cd /usr/local/nginx/html/zabbix/conf
[root@zabbix-server conf]# ls
maintenance.inc.php zabbix.conf.php.example
网页设置Zabbix web端
#在浏览器设置完,就出现了zabbix.conf.php
[root@zabbix-server conf]# ls
maintenance.inc.php zabbix.conf.php zabbix.conf.php.example
#打开看看,这就是我们刚才设置的内容
[root@zabbix-server conf]# cat zabbix.conf.php
<?php
// Zabbix GUI configuration file.
global $DB;
$DB['TYPE'] = 'MYSQL';
$DB['SERVER'] = 'localhost';
$DB['PORT'] = '0';
$DB['DATABASE'] = 'zabbix';
$DB['USER'] = 'zabbix';
$DB['PASSWORD'] = '123123';
// Schema name. Used for IBM DB2 and PostgreSQL.
$DB['SCHEMA'] = '';
$ZBX_SERVER = 'localhost';
$ZBX_SERVER_PORT = '10051';
$ZBX_SERVER_NAME = 'zabbixserver';
$IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG;
Zabbix_server.conf 配置
通过源码安装发时将zabbix安装到/usr/local/zabbix下面,zabbix server 的配置文件为/usr/local/zabbix/etc/zabbix_server.conf
#需修改的内容如下
[root@zabbix-server conf]# cd /usr/local/zabbix/etc/
[root@zabbix-server etc]# cat -n /usr/local/zabbix/etc/zabbix_server.conf |sed -n '12p;38p;87p;103p;111p;118p;136p;165p;181p;297p;447p'
12 ListenPort=10051 #zabbix server监听端口
38 LogFile=/tmp/zabbix_server.log #zabbix server日志路径
87 DBName=zabbix #连接MySQL数据库的库名
103 DBUser=zabbix #连接MySQL数据库的用户名
111 DBPassword=123123 #连接MySQL数据库的密码
118 DBSocket=/tmp/mysql.sock #MySQL实例文件位置
136 StartPollers=5 #用于设置zabbix server 服务启动时启动Pollers(主动收集数据进程)的数量,数量越多,则服务端吞吐能力越大,同时对系统资源消耗越大
165 StartTrappers=10 #用于设置zabbix server 服务启动时启动Trappers(负责处理Agentd推送过来的数据的进程)的数量,Agentd为主动模式时,zabbix server 需要设置这个值大一些
181 StartDiscoverers=10 #用于设置zabbix server 服务启动时启动Discoverers进程的数量,如果zabbix监控报Discoverers进程忙时,需提高该值。
297 ListenIP=0.0.0.0 #zabbix server 启动的监听端口对哪些ip开放,Agentd为主动模式时,这个值建议设置为0.0.0.0
447 AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts #zabbix server 运行脚本存放目录,一些供zabbix server使用的脚本,都可以放在这里
#添加相关服务和端口到系统配置文件
[root@zabbix-server etc]# tail -4 /etc/services
zabbix-agent 10050/tcp # Zabbix Agent
zabbix-agent 10050/udp # Zabbix Agent
zabbix-trapper 10051/tcp # Zabbix Trapper
zabbix-trapper 10051/udp # Zabbix Trapper
#解决错误
cat >> /etc/ld.so.conf << aaa
/usr/local/mysql/lib
aaa
ldconfig
#添加管理维护脚本,从zabbix源码包misc/init.d/fedora/cora/目录中找到zabbix_server和zabbix_agentd,然后复制到/etc/init.d目录下,如果我们的zabbix_agentd采用的rpm安装方式,会自动添加启动脚本,那么我们不进行zabbix_agentd的启动脚本的复制
cd /usr/src/zabbix-3.2.4/misc/init.d/fedora/core/
cp zabbix_server /etc/init.d/zabbix_server
cd /etc/init.d
chmod +x /etc/init.d/zabbix_server
#启动zabbix_server端进程
/etc/init.d/zabbix_server start
#添加开机启动
cat >> /etc/rc.local << qqq
/usr/local/nginx/sbin/nginx
/etc/init.d/mysqld start
/usr/local/php/sbin/php-fpm
/etc/init.d/zabbix_server start
qqq
启动zabbix_server出现错误
启动出现错误
[root@zabbix-server init.d]# /etc/init.d/zabbix_server start
Starting zabbix_server: /usr/local/sbin/zabbix_server: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory
[FAILED]
解决:解决方法:
检查libmysqlclient.so.18
已存在
第一个方法:
vim /etc/ld.so.conf
添加
/usr/local/mysql/lib
输入命令
ldconfig
/etc/init.d/zabbix_server start
第二个方法:
ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib/
zabbix_agent的安装与配置(服务端和客户端都要安装)
zabbix agent的安装建议采用rpm包方式安装(工作中批量安装的,编译的话很麻烦)
下载:http://repo.zabbix.com/zabbix/3.2 版本与zabbix server端一致
zabbix server源码包包含server和agent端
zabbix agent的rpm包是为了方便在服务器上快速安装而设计的快捷安装包
#server端和agent端安装zabbix-agent,为了统一,所以都这样安装
cd
wget http://repo.zabbix.com/zabbix/3.2/rhel/6/x86_64/zabbix-agent-3.2.4-1.el6.x86_64.rpm
rpm -ivh zabbix-agent-3.2.4-1.el6.x86_64.rpm
#修改zabbix agent端配置文件
[root@zabbix-server zabbix]# ll
total 16
-rw-r--r--. 1 root root 10347 Mar 1 2017 zabbix_agentd.conf
#下面是目录,在主配置文件里,有个include,引用目录里*.conf进主配置文件,我们以后可以在这里面修改、添加等
drwxr-xr-x. 2 root root 4096 May 13 23:51 zabbix_agentd.d
[root@zabbix-server zabbix]# cat -n /etc/zabbix/zabbix_agentd.conf |sed -n '13p;32p;95p;103p;120p;136p;147p;265p;284p'
13 PidFile=/var/run/zabbix/zabbix_agentd.pid #进程pid存放路径
32 LogFile=/var/log/zabbix/zabbix_agentd.log #日志存放路径
95 Server=127.0.0.1,192.168.200.168 #第一个IP是本地,即监控本地, server从这个ip过来,否则不能监控本地,两个IP之间用逗号k
103 ListenPort=10050 #指定agentd监听端口
120 StartAgents=3 #指定启动agentd进程数量,0表示关闭
136 ServerActive=192.168.200.168:10051 #启动agentd主动模式。 启动后,agentd将主动收集到的数据发送到sever端,server active后面指定的IP就是server端IP
147 Hostname=192.168.200.168 #写主机名需要映射,agent端的. 需要监控服务器的主机名或IP地址,此选项设置一定要和zabbix web端主机配置中对应的主机名一致
265 Include=/etc/zabbix/zabbix_agentd.d/*.conf#相关配置文件放到里面
284 UnsafeUserParameters=1 #启用agent端自定义item功能. 设置参数为1,就能使用UnsafeUserParameters指令了,UnsafeUserParameters用于自定义item
#启动zabbix agent端进程
#如果启动失败,那么可能是iptables selinux
[root@zabbix-server zabbix]# getenforce
Enforcing
[root@zabbix-server zabbix]# setenforce 0
[root@zabbix-server zabbix]# /etc/init.d/zabbix-agent start
#加入开机启动
[root@zabbix-server zabbix]# chkconfig zabbix-agent on
#server端给agent端发送配置文件zabbix_agentd.conf
[root@zabbix-server zabbix]# scp zabbix_agentd.conf 192.168.200.169:/etc/zabbix/
#agent端的zabbix_agentd.conf 需要修改
[root@zabbix-agent-nginx ~]# cd /etc/zabbix/
[root@zabbix-agent-nginx zabbix]# cat -n zabbix_agentd.conf |sed -n '13p;32p;95p;103p;120p;136p;147p;265p;284p'
13 PidFile=/var/run/zabbix/zabbix_agentd.pid
32 LogFile=/var/log/zabbix/zabbix_agentd.log
95 Server=192.168.200.168 #关闭127.0.0.1
103 ListenPort=10050
120 StartAgents=3
136 ServerActive=192.168.200.168:10051
147 Hostname=192.168.200.169 #修改IP地址
265 Include=/etc/zabbix/zabbix_agentd.d/*.conf
284 UnsafeUserParameters=1
[root@zabbix-agent-nginx zabbix]# /etc/init.d/zabbix-agent start
[root@zabbix-agent-nginx zabbix]# ss -antup |grep 10050
tcp LISTEN 0 128 :::10050 :::* users:(("zabbix_agentd",17230,5),("zabbix_agentd",17231,5),("zabbix_agentd",17232,5),("zabbix_agentd",17233,5),("zabbix_agentd",17234,5),("zabbix_agentd",17235,5))
tcp LISTEN 0 128 *:10050 *:* users:(("zabbix_agentd",17230,4),("zabbix_agentd",17231,4),("zabbix_agentd",17232,4),("zabbix_agentd",17233,4),("zabbix_agentd",17234,4),("zabbix_agentd",17235,4))
测试Zabbix server监控
通过zabbix server上的zabbix_get命令来完成。
- -s:指定zabbix agent端的IP端口,
- -p:指定zabbix agent端的监听端口
- -k:监控项(item)
#有输出结果,说明配置成功
[root@zabbix-server zabbix]# /usr/local/zabbix/bin/zabbix_get -s 192.168.200.168 -p 10050 -k "system.uptime"
17885
[root@zabbix-server zabbix]# /usr/local/zabbix/bin/zabbix_get -s 192.168.200.169 -p 10050 -k "system.uptime"
17872