Zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。
强大,好用,一起用起来。
一、Zabbix分布式架构
本文中的Zabbix分布式架构如下:
Zabbix Web: Web页面,使用PHP编写。给管理者管理zabbix和浏览数据。
Zabbix Server: 是整个zabbix的核心,捕获和接收agent或proxy上传的监控数据,根据监控项定义处理和计算数据,并向用户发送告警。
Zabbix Proxy: 可以代替server从一个或多个被管设备(agent)检索数据,缓存到本地,依次传送给server;在一定程度上分担server的压力,简化zabbix的维护。
Zabbix Agent: 部署在被管机器上,以主动或被动的形式采集监控项数据,并按键值对的格式将数据上传proxy或server。
Mysql数据库: 作为数据持久层存储历史性能数据。
Nginx: 作为静态网站服务器让用户与Zabbix交互。
二、安装配置
1. 虚机准备
准备3台centos7虚拟机
hostname | ip | 部署 |
---|---|---|
master | 10.211.55.4 | server mysql |
node1 | 10.211.55.5 | proxy mysql |
node2 | 10.211.55.6 | agent |
2. 软件包准备
2.1 下载zabbix安装包
https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/4.2.4/zabbix-4.2.4.tar.gz
2.2 下载mysql安装包
https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.17-linux-glibc2.12-x86_64.tar.xz
2.3 下载PHP安装包
https://www.php.net/releases/#5.6.40
2.4 下载Nginx安装包
http://nginx.org/en/download.html
3. 环境准备
3.1 安装mysql
在server和proxy机子上均安装mysql数据库,以便存储数据。
#下载
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.17-linux-glibc2.12-x86_64.tar.xz
#解压
tar -xvf mysql-8.0.17-linux-glibc2.12-x86_64.tar.xz
#创建数据文件存放路径
mkdir /usr/local/mysql_soft
mkdir /usr/local/mysqldata
#创建mysql属组&属主
groupadd mysql && useradd -g mysql mysql
#将mysql文件移至soft文件夹以便管理
mv mysql-8.0.17-linux-glibc2.12-x86_64.tar.xz /usr/local/mysql_soft
#创建软链接
ln -s /usr/local/mysql_soft/mysql-8.0.17-linux-glibc2.12-x86_64 /usr/local/mysql
#创建修改my.cnf配置文件中参数。详细参数可后台获取my.cnf文件参考。
vi /etc/my.cnf
#加密方式修改为旧版,否则会报错:The server requested authentication method unknown to the client
default_authentication_plugin=mysql_native_password
#初始化mysql
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysqldata/
#添加环境变量
vi /etc/profile
export PATH=$PATH:/usr/local/mysql/bin
#使变量生效
source /etc/profile
#启动mysq
/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &
#登陆mysql,用root账号,root密码在my.cnf中设定的log文件中
mysql -uroot -p
#ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
ln -s /mysqldata/mysql.sock /tmp/mysql.sock
#登陆后修改root密码
alter user 'root'@'localhost' identified with mysql_native_password by 'root';
3.2. 依赖包安装
server端:
yum -y install java java-devel gcc gcc-c++
yum -y install OpenIPMI OpenIPMI-devel libssh2 libssh2-devel libcurl net-snmp net-snmp-devel libxml2 libxml2-devel openldap-devel curl curl-devel perl-DBI mod_ssl unixODBC-devel mysql-connector-odbc libdbi-dbd-mysql libevent-devel fping
proxy端:
yum -y install java java-devel gcc gcc-c++
yum -y install OpenIPMI OpenIPMI-devel libssh2 libssh2-devel libcurl net-snmp net-snmp-devel net-snmp-utils curl curl-devel perl-DBI mod_ssl unixODBC-devel libevent-devel fping
4. Zabbix Server编译安装
4.1 创建用户及用户组
groupadd zabbix
useradd -g zabbix zabbix
usermod -s /sbin/nologin zabbix
4.2 创建zabbix数据库、zabbix用户并执行授权命令
create database zabbix character set utf8mb4 collate utf8mb4_bin;
grant all on zabbix.* to 'zabbix'@'localhost' with grant option;
update user set Host='%' where User='zabbix';
flush privileges;
4.3 Server部署
4.3.1 解压
tar -zxvf zabbix-4.2.4.tar.gz
cd zabbix-4.2.4
4.3.2 编译安装
./configure --prefix=/usr/local/zabbixsvr/ --enable-server --enable-agent --enable-proxy --enable-java --enable-ipv6 --with-mysql --with-net-snmp --with-libcurl --with-libxml2 --with-ssh2
make && make install
4.3.3 将基础sql文件导入数据库
#sql文件在解压的文件夹里
cd zabbix-4.2.4
mysql -uzabbix -pzabbix zabbix < database/mysql/schema.sql
mysql -uzabbix -pzabbix zabbix < database/mysql/images.sql
mysql -uzabbix -pzabbix zabbix < database/mysql/data.sql
4.3.4 修改server配置文件
#切换到配置文件所在目录
cd /usr/local/zabbixsvr/etc/
#备份配置文件
cp zabbix_server.conf zabbix_server.conf.bak
#配置文件更改
vim zabbix_server.conf
#配置文件:
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
4.3.5 启动server
/usr/local/zabbixsvr/sbin/zabbix_server -c /usr/local/zabbixsvr/etc/zabbix_server.conf
5. 配置Zabbix Web页面
5.1 PHP
5.1.1 依赖安装
yum install -y libxml2-devel pcre-devel libjpeg-devel libpng-devel openldap-devel freetype-devel
5.1.2 解压
#https://www.php.net/releases/#5.6.40
tar -jxvf php-5.6.36.tar.bz2
5.1.3 复制ldap到/usr/lib
#configure: error: Cannot find ldap libraries in /usr/lib.
cp -frp /usr/lib64/libldap* /usr/lib/
5.1.4 编译
./configure --prefix=/usr/local/php --with-config-file-path=/etc --enable-bcmath --enable-fpm --with-gd --enable-json --with-ldap --enable-mbstring --enable-xml --enable-sockets --with-freetype-dir --with-jpeg-dir --with-png-dir --with-gettext --with-zlib --enable-mysqlnd --with-mysqli
5.1.5 修改MakeFile
vi MakeFile
#找到 开头是 'EXTRA_LIBS' 这一行 在结尾加上 '-llber'
5.1.6 make
make && make install
5.1.7 创建修改配置文件
cp php.ini-production /etc/php.ini
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
# vi /etc/php.ini
post_max_size = 16M
max_execution_time = 300
max_input_time = 300
date.timezone = Asia/Shanghai
cgi.fix_pathinfo=1
5.1.8 启动php
/usr/local/php/sbin/php-fpm
5.2 Nginx
5.2.1 解压
tar -zxvf nginx-1.17.7.tar.gz
cd nginx-1.17.7
5.2.2 编译
./configure --prefix=/usr/local/nginx
make && make install
5.2.3 更改nginx配置文件
#vi /usr/local/nginx/conf/nging.conf
server {
listen 80;
server_name localhost;
root /usr/local/nginx/html;
index index.php;
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;
}
}
5.2.4 拷贝php页面文件
mkdir -p /usr/local/nginx/zabbix/html
cp -r zabbix-4.2.4/frontends/php/ /usr/local/nginx/zabbix/html/
chmod 777 -R /usr/local/nginx/zabbix
chown zabbix:zabbix -R /usr/local/nginx/zabbix
5.2.5 启动nginx
/usr/local/nginx/sbin/nginx
5.3 访问Web页面
通过浏览器访问http://服务器IP
配置
6. Zabbix Proxy安装配置
6.1 编译安装
cd zabbix-4.2.4
./configure --prefix=/usr/local/zabbix_proxy/ --enable-agent --enable-java --enable-ipv6 --enable-proxy --with-mysql --with-net-snmp --with-libcurl --with-libxml2 --with-ssh2 --with-openipmi --with-unixodbc --with-openssl
make && make install
6.2 配置数据库
#不能跟server共用一个数据库!!!
create database zabbix_proxy charset=utf8;
grant all on zabbix_proxy.* to zabbix@"%" identified by 'zabbix';
flush privileges;
6.3 导入基础sql文件
#只导这一个文件就够了,切记!!!(否则会报cannot use database "zabbix_proxy": Zabbix proxy cannot work with a Zabbix server database这个错)
cd zabbix-4.2.4
mysql -uzabbix -pzabbix zabbix_proxy < database/mysql/schema.sql
6.4 修改proxy配置文件
cp zabbix_proxy.conf zabbix_proxy.conf.bak
vim zabbix_proxy.conf
#配置文件
Server=10.211.55.4 ##server的IP地址
Hostname=proxy1 ##代理名,需要与Web端添加代理时的名字一致
DBName=zabbix_proxy
DBUser=zabbix
DBPassword=zabbix
6.5 启动
/usr/local/zabbix_proxy/sbin/zabbix_proxy -c /usr/local/zabbix_proxy/etc/zabbix_proxy.conf
6.6 在Web添加代理
7. Zabbix Agent编译安装
7.1 编译安装
yum -y install pcre*
cd zabbix-4.2.4
./configure --prefix=/usr/local/zabbix/ --enable-agent
make && make install
7.2 修改配置文件
#vim /usr/local/zabbix/etc/zabbix_agentd.conf
Server=10.211.55.5 ##代理或者serverIP
ServerActive=10.211.55.5 ##代理或者serverIP
Hostname=10.211.55.6 ##主机名,需要与Web添加主机时的名字一致
7.3 启动
/usr/local/zabbix/sbin/zabbix_agentd -c /usr/local/zabbix/etc/zabbix_agentd.conf
7.4 添加主机
创建主机时,选择代理IP
8. 自启动脚本
Centos7创建启动脚本:centos7 采用systemd启动方式,使用源码编译不自带启动脚本文件需要自己编写
1.创建文件
#zabbix-server
vim /usr/lib/systemd/system/zabbix-server.service
#zabbix-proxy
vim /usr/lib/systemd/system/zabbix-proxy.service
#zabbix-agent
vim /usr/lib/systemd/system/zabbix-agent.service
2.启动文件配置
zabbix-server.service
[Unit]
Description=Zabbix Server
After=syslog.target
After=network.target
[Service]
Environment="CONFFILE=/usr/local/zabbixsvr/etc/zabbix_server.conf"
EnvironmentFile=-/etc/sysconfig/zabbix-server
Type=forking
Restart=on-failure
PIDFile=/tmp/zabbix_server.pid
KillMode=control-group
ExecStart=/usr/local/zabbixsvr/sbin/zabbix_server -c $CONFFILE
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
TimeoutSec=0
[Install]
WantedBy=multi-user.target
zabbix-proxy.service
[Unit]
Description=Zabbix Proxy
After=syslog.target
After=network.target
[Service]
Environment="CONFFILE=/usr/local/zabbix_proxy/etc/zabbix_proxy.conf"
EnvironmentFile=-/etc/sysconfig/zabbix-proxy
Type=forking
Restart=on-failure
PIDFile=/tmp/zabbix_proxy.pid
KillMode=control-group
ExecStart=/usr/local/zabbix_proxy/sbin/zabbix_proxy -c $CONFFILE
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
[Install]
WantedBy=multi-user.target
zabbix-agent.service
[Unit]
Description=Zabbix Agent
After=syslog.target
After=network.target
[Service]
Environment="CONFFILE=/usr/local/zabbix/etc/zabbix_agentd.conf"
EnvironmentFile=-/etc/sysconfig/zabbix-agent
Type=forking
Restart=on-failure
PIDFile=/tmp/zabbix_agentd.pid
KillMode=control-group
ExecStart=/usr/local/sbin/zabbix_agentd -c $CONFFILE
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
[Install]
WantedBy=multi-user.target
3.基本命令
#添加开机自启
systemctl enable zabbix-server
systemctl enable zabbix-proxy
systemctl enable zabbix-agent
#取消开机自启
systemctl disable zabbix-server
systemctl disable zabbix-proxy
systemctl disable zabbix-agent
#重启服务
systemctl restart zabbix-server
systemctl restart zabbix-proxy
systemctl restart zabbix-agent
#启动服务
systemctl start zabbix-server
systemctl start zabbix-proxy
systemctl start zabbix-agent
#停止服务
systemctl stop zabbix-server
systemctl stop zabbix-proxy
systemctl stop zabbix-agent
三、配置自定义监控项
1. 修改配置文件
#vi /usr/local/zabbix/etc/zabbix_agentd.conf
UnsafeUserParameters=1 #修改为1
UserParameter=login-user, who | wc -l #添加自定义参数
格式为 UserParameter=<key>,<shell command> key值不能与现有的重复,现有的key值可以通过zabbix的web界面找到或者通过命令zabbix_agentd -p打印出来。
2. 添加监控项
*key为上一步添加的UserParameter
3. 查看数据
4. 添加触发器
四、告警邮件配置
1. 脚本方式
1.1 修改server配置文件
#vim zabbix_server.conf
AlertScriptsPath=/usr/local/zabbixsvr/alertscripts
cd /usr/local/zabbixsvr/alertscripts
#vim sendMessage.sh
#!/usr/bin/env python
#-*- coding: UTF-8 -*-
import os,sys
import getopt
import smtplib
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
from subprocess import *
def sendqqmail(username,password,mailfrom,mailto,subject,content):
gserver = 'smtp.139.com'
gport = 25
try:
msg = MIMEText(content,'plain','utf-8')
msg['from'] = mailfrom
msg['to'] = mailto
msg['Reply-To'] = mailfrom
msg['Subject'] = subject
smtp = smtplib.SMTP(gserver, gport)
smtp.set_debuglevel(0)
smtp.ehlo()
smtp.login(username,password)
smtp.sendmail(mailfrom, mailto, msg.as_string())
smtp.close()
except Exception,err:
print "Send mail failed. Error: %s" % err
def main():
to=sys.argv[1]
subject=sys.argv[2]
content=sys.argv[3]
sendqqmail('xx@139.com','password','xx@139.com',to,subject,content)
if __name__ == "__main__":
main()
chown -R zabbix:zabbix sendMessage.py
chmod 755 sendMessage.py
1.2 Zabbix Web端配置
Administration –> Media types –> Create media type
为当前user指定media:Administration –> Users –> Admin –> Media ->Add
创建action实现邮件报警Configuration –> Actions –> Create action
1.3 创造告警
1.4 查看Action log
查看产生告警后的动作Reports –> Action log
1.5 告警邮件
2. 自带Email方式
Administration –> Media types –> Email
至此,已完成部署一个小型的分布式Zabbix监控系统并配置好告警邮件。之后各位童鞋可以更灵活得将Zabbix应用到工作中,使用Zabbix强大的功能,例如:snmp监控网络设备、ipmi监控硬件、监控vcenter集群、接入Prometheus、接入Grafana生成更酷炫的图表。
扫码关注,获取精选资源