Zabbix 是一个企业级的分布式开源监控解决方案,它能够监控各种服务器的健康性、网络的稳定性以及各种应用系统的可靠性。当监控出现异常时,Zabbix 通过灵活的告警策略,可以为任何事件配置基于邮件、短信、微信等告警机制。而这所有的一切,都可以通过 Zabbix 提供的 Web 界面进行配置和操作,基于 Web 的前端页面还提供了出色的报告和数据可视化功能。这些功能和特性使运维人员可以非常轻松的搭建一套功能强大的运维监控管理平台。

概念

应用组件

Server

Zabbix Server 是 Zabbix 的核心组件,是所有配置信息、统计信息和操作数据的核心存储器。 它主要负责接收客户端发送的报告和信息,同时,所有配置、统计数据及配置操作数据均由其组织进行。

Database Storage

主要用于存储数据,所有配置信息和 Zabbix 收集到的数据都被存储在数据库中;常用的存储设备有 MySQL、Oracle、SQLite 等。

Web 界面

这是 Zabbix 提供的 GUI 接口,通常(但不一定)与 Zabbix Server 运行在同一台物理机器上。

Proxy 代理服务器

这是一个可选组件,常用于分布监控环境中,代理 Server 可以替 Zabbix Server 收集性能和可用性数据,汇总后统一发往 Zabbix Server 端。

Agent 监控代理

Zabbix Agent 部署在被监控主机上,能够主动监控本地资源和应用程序,并负责收集数据发往 Zabbix Server 端或 Zabbix Proxy 端。

服务进程

zabbix_agentd

zabbix_agentd是Zabbix Agent监控代理端守护进程,此进程收集客户端数据,例如cpu负载、内存、硬盘、网络使用情况等。

zabbix_get

zabbix提供的一个工具,通常在Zabbix server或者Zabbix proxy端执行用来获取远程客户端信息,这其实是Zabbix server去Zabbix Agent端拉取数据的过程,此工具主要用来进行用户排错。例如在Zabbix server端获取不到客户端的监控数据时,可以使用zabbix_get命令测试获取客户端数据来做故障排查。

zabbix_sender

zabbix提供的一个工具,用于发送数据给Zabbix server或者Zabbix proxy,这其实是Zabbix Agent端主动推送监控数据到Zabbix Server端的过程,通常用于耗时比较长的检查或者有大量主机(千台以上)需要监控的场景。此时通过主动推送数据到Zabbix server,可以在很大程度上减轻Zabbix server的压力和负载。

zabbix_proxy

Zabbix Proxy的代理守护进程。功能类似Zabbix server,唯一不同的是它只是一个中转站,它需要把收集到的数据提交或者被提交到Zabbix server上。

zabbix_java_gateway

Zabbix2.0之后引入的一个功能。顾名思义:Java网关,主要用来监控JAVA应用环境,类似zabbix_agentd进程。需要特别注意的是,它只能主动去推送数据,而不能等待zabbix server或者zabbix proxy来拉取数据。它的数据最终会给到zabbix server或者zabbix proxy上。

zabbix_server

Zabbix server是整个Zabbix系统的核心进程。其它进程zabbix_agentd、zabbix_get、zabbix_sender、zabbix_proxy、zabbix_java_gateway的数据最终都是提交到Zabbix server来统一进行处理。

监控术语

主机(host)

表示要监控的一台服务器或者网络设备,可以通过IP或主机名指定。

主机组(host group)

主机的逻辑组;它包含主机和模板,但同一个主机组内的主机和模板没有任何直接的关联;主机组通常在给用户或用户组指派监控权限时使用

监控项(item)

表示一个监控的具体对象,例如监控服务器的CPU负载、磁盘空间等,item是zabbix进行数据收集的核心,相对某个监控对象,每个item都由”key”来标识

触发器(trigger)

其实就是一个监控阈值表达式,用于评估某监控对象接收到的数据是否在合理范围内;如果接收的数据大于阈值时,触发器状态将从”OK”转变为”Problem”,当接收到的数据低于阈值时,又转变为”OK”状态。

应用集(Applications)

一组监控项组成的逻辑集合。

动作(action)

指对于监控中出现的问题事先定义的处理方法,例如发送通知,何时执行操作、执行的频率等等;

报警媒介类型(media)

表示发送通知的手段,告警通知的途径,如Email、Jabber或者SMS等;

模板(template)

一组可以被应用到一个或多个主机上的实体集合,一个模板通常包含了应用集、监控项、触发器、图形、聚合图形、自动发现规则、Web场景等几个项目;模板可以直接链接到某个主机。
模板是学习zabbix的一个难点和重点,为了实现批量、自动化监控,通常会将具有相同特征的监控项汇总到模板中,然后在主机中直接引用即可,实现快速监控部署。

监控

LNMP 环境部署

LANMP 环境搭建

优化 PHP

php 配置文件:vim /etc/php.ini

  1. max_execution_time = 300
  2. max_input_time = 300
  3. memory_limit = 128M
  4. post_max_size = 16M
  5. date.timezone = Asia/Shanghai

修改 php-fpm 配置文件:vim /etc/php-fpm.d/www.conf:

  1. user = apache
  2. group = apache
  3. 修改为
  4. user = nginx
  5. group = nginx
  6. yum install php-bcmath php-ldap
  7. systemctl restart php-fpm

否则会报错
image.png

配置 vhost

vim /etc/nginx/vhost/zabbix.conf

  1. server {
  2. listen 80;
  3. #listen 443 ssl http2;
  4. #listen [::]:443 ssl http2;
  5. server_name 192.168.10.12;
  6. root /opt/www/zabbix;
  7. #ssl_certificate /etc/nginx/ssl/zabbix.crt;
  8. #ssl_certificate_key /etc/nginx/ssl/zabbix.key;
  9. access_log /dev/null;
  10. error_log /var/log/nginx/error_zabbix.log;
  11. index index.php index.html index.htm;
  12. location / {
  13. proxy_method GET;
  14. try_files $uri $uri/ /index.php$is_args$args;
  15. }
  16. location ~ \.php(.*)$ {
  17. fastcgi_pass 127.0.0.1:9000;
  18. fastcgi_index index.php;
  19. include fastcgi.conf;
  20. }
  21. }

搭建 Zabbix

安装 zabbix-web

  1. wget https://cdn.zabbix.com/zabbix/sources/stable/5.0/zabbix-5.0.14.tar.gz
  2. tar xf zabbix-5.0.14.tar.gz
  3. mkdir /opt/www/zabbix
  4. cp -a zabbix-5.0.14/ui/* /opt/www/zabbix
  5. #修改站点目录属主和属组
  6. chown -R nginx:nginx /opt/www/zabbix

重启 nginx 和 php-fpm 服务器 500,查询
chown -R nginx:nginx /var/lib/php/session
安装依赖:yum install -y net-snmp net-snmp-devel curl curl-devel libxml2 libevent libevent-devel
创建一个普通用户用于启动 zabbix 的守护进程

  1. groupadd zabbix
  2. useradd -g zabbix zabbix

安装 zabbix-server

  1. rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
  2. yum clean all
  3. #安装 Zabbix Server 和 Agent
  4. yum install zabbix-server-mysql zabbix-agent

创建数据库

  1. create database zabbix character set utf8 collate utf8_bin;
  2. create user zabbix@localhost identified by '12345678';
  3. grant all privileges on zabbix.* to zabbix@localhost;
  4. flush privileges;
  5. quit;

账户创建一直报错:“ERROR 1396 (HY000): Operation CREATE USER failed for ‘zabbix’@’localhost’”

  1. drop user zabbix@localhost;
  2. flush privileges;

导入初始架构和数据:zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
报错:“ERROR 1813 (HY000): Tablespace ‘db1.table1‘ exists.”

配置数据库
编辑配置文件:vim /etc/zabbix/zabbix_server.conf
DBPassword=12345678

完成安装

image.png
image.png
一直下一步,直至安装完成,默认账号密码:Admin/zabbix(区分大小写)。

安装 Agent

官网下载

Linux

YUM 安装

https://www.zabbix.com/cn/download

  1. rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
  2. yum clean all
  3. yum install zabbix-agent
  4. systemctl start zabbix-agent
  5. systemctl enable zabbix-agent

编译安装

wget https://cdn.zabbix.com/zabbix/binaries/stable/5.0/5.0.14/zabbix_agent-5.0.14-linux-ppc64le-static.tar.gz

编辑配置

vim /etc/zabbix/zabbix_agentd.conf

  1. Server=zabbix server ip
  2. ServerActive=zabbix server ip
  3. Hostname=Hostname of client system
  4. HostMetadataItem=system.uname
  5. systemctl restart zabbix-agent

Windwos

image.png
image.png

添加主机

自动发现

image.png
image.png
更新 IP 范围并启用规则;
image.png

自动注册

agent 自动注册(agent auto-registration),Zabbix agent 自动注册为一个主机,并且开始监控的自动执行进程;自动发现和自动注册是两种不同的添加被监控项主机的方式,在做自动注册时,先将上一步做的“动作“和“自动发现”停用并将发现的主机删除。
image.png
image.png

手动添加

image.png

优化

通过 Zabbix 的 NVPS(每秒处理数值数)来衡量其性能,在 Zabbix 的 dashboard 上的 Status of Zabbix

Server

vim /etc/zabbix/zabbix_server.conf

  1. DisableHousekeeper=1
  2. StartDiscoverers=5
  3. StartPollers=90
  4. StartPingers=10
  5. StartPollersUnreacheable=80
  6. StartIPMIPollers=10
  7. StartTrappers=20
  8. StartDBSyncers=8
  9. LogSlowQueries=1000

systemctl restart zabbix-server

数据库

  • 用数据服务器
  • 每个 table 一个文件,修改 my.cnf:innodb_file_per_table=1
  • 使用 Percona 代替 MySQL
  • 使用 tmpfs 存储临时文件

mkdir /tmp/mysqltmp
vim /etc/fstab
tmfs /tmp/mysqltmp tmpfsrw,uid=mysql,gid=mysql,size=1G,nr_inodes=10k,mode=0700 0 0
vim my.cnf
tmpdir=/tmp/mysqltmp

  • 设置正确的 buffer pool

设置 Innodb 可用多少内存,建议设置成物理内存的 70%~80%
vim my.cnf
innodb_buffer_pool_size=14G
设置 innodb 使用 O_DIRECT,这样 buffer_pool 中的数据就不会与系统缓存中的重复
innodb_flush_method=O_DIRECT

  • 设置合适的 log 大小

zabbix 数据库属于写入较多的数据库,因此设置大一点可以避免 MySQL 持续将 log 文件 flush 到表中
不过有一个副作用,就是启动和关闭数据库会变慢一点
vim my.cnf
innodb_log_file_size=64M

  • 打开慢查询日志

vim my.cnf
log_slow_queries=/var/log/mysql.slow.log

  • 设置 thread_cache_size

这个值似乎会影响 show global status 输出中 Threads_created perConnection 的 hit rate
当设置成 4 的时候有 3228483 Connections 和 5840 Threads_created、hitrate达 到了 99.2%
Threads_created 这个数值应该越小越好

  • 其他 MySQL 文档建议的参数调整
    1. query_cache_limit=1M
    2. query_cache_size=128M
    3. tmp_table_size=256M
    4. max_heap_table_size=256M
    5. table_cache=256
    6. max_connections=300
    7. innodb_flush_log_at_trx_commit=2
    8. join_buffer_size=256k
    9. read_buffer_size=256k
    10. read_rnd_buffer_size=256k

    字体方块

    image.png
    1. cat /opt/www/zabbix/include/defines.inc.php | grep FONT
    2. find / | grep DejaVuSans
    3. 找到文件位置:/opt/www/zabbix/assets/fonts/DejaVuSans.ttf
    使用中文字体即可解决,两种方法:修改配置文件和替换字体文件,推荐后者。
    image.png