Zabbix
系统它也与其它的被监控的系统一样,也是一种应用系统。所以,它的状态、性能数据也需要被采集与监控。以便对它的运行性能、状态情况进行了解,进而在必要的时候对它进行性能调优或进行必要的系统硬件升级,甚至对它的架构进行更换。例如,一般组织,随着组织业务的不断拓展和实际发展的需要,被监控设备和被监控项目的数量会快带的增长。而这种增长达到一定的程度以后,原来采用的单台独立服务器模式的Zabbix系统就很难满足组织的需要,这个时候我们可能就需要及时的将单台独立服务器运行模式更换为分布式模式进行运行。Zabbix
系统进行硬件升级、系统性能优化甚至更换独立服务器模式为分布式服务器模式时,就需要面临依据的问题。即在我们决定进行上述升级时,我们就需要有数据依据。Zabbix
系统内部数据采集方法就是采集和监控Zabbix
系统自身状态和性能数据的方法。Zabbix
系统内部数据采集方法是由Zabbix
服务器端通过计算获取的,所以这种数据采集方法不需要安装任何的客户端。Zabbix
系统到底该如何优化,我大致总结了以下优化内容:
Zabbix Server
配置;HouseKeeper
;Zabbix
数据库进行表分区;Zabbix
的架构。在讲Zabbix优化之前,先来看看Zabbix Server
的逻辑架构图:
对于上图中,架构组件的描述:
Zabbix进程:
Self-Monitoring
:用于收集Zabbix
系统内部的监控信息;Configuration syncer
:用于将配置文件中的配置信息同步到内存中缓存;Timer
:用于处理触发器中与时间相关的函数和维护模式的进程;History syncer
:用于写历史数据表的进程;Escalator
:用于处理Action
中的步骤的进程;Housekeeper
:用于清理过期的历史数据的进程;Db watchdog
:用于监视Zabbix
系统的数据库状态,当数据库状态变为不可用时,发送警告信息(服务器代理端不支持这类型进程)。Zabbix Poller:
Poller
:用于普通的被动监控项目的轮询;ICMP pinger
:用于定期的进行ICMP PING
检查;IPMI poller
:用于定期进行IPMI
监控项目的检查;Unreachable poller
:用于轮询不可达的设备;Proxy poller
:用于服务器代理的被动轮询;Trapper
:用于处理主动采集、陷入以及分布式节点间或服务器代理的通信;Java poller
:用于轮询Java
监控项目;Http poller
:用于轮询Web
类的监控项目;Snmp trapper
:用于轮询Snmp/trap
类的监控项目;Discovery
:用于自动发现设备的进程;Vmware Collector
:负责从VMware
服务进程中收集数据(服务器代理端不支持这种类型的进程);Alerter
:用于发送报警通知进程。本次优化不包含Zabbix
系统的数据库表分区,这块内容会在后续文章中提到。
常用的架构:(说明:Zabbix
最简单的架构,常用于监控主机比较少的情况下。) :
分布式架构:Server-Proxy-Agentd
模式。
说明:Zabbix
分布式架构,常用于监控主机比较多的情况下,使用Zabbix Proxy
进行分布式监控,有效的减轻了Zabbix Server
端的压力。
调整配置文件:Zabbix_Server.conf
Zabbix进程参数调整:
StartPollers=80
StartPingers=10
StartPollersUnreachable=80
StartIPMIPollers=10
StartTrappers=20
StartDBSyncers=8
值得注意的是,当Zabbix
的Pollers
数量过多时(超过limit默认值1024),需要对系统的limit
的参数大小进行修改。
shell> vi /etc/security/limit.conf
* hard nofile 65536
* soft nofile 65536
* hard nproc 65536
* soft nproc 65536
Zabbix In-Memory Cache参数优化(以下值仅做参考):
ValueCacheSize=256M
HistoryIndexCacheSize = 64M
TrendCacheSize=64M
HistoryCacheSize=128M
CacheSize=128M
VMwareCacheSize=64M
调整MySQL
配置文件:my.cnf或my.ini
,在[mysqld]
酌情修改参数:
[client]
port = 3306
socket = /var/lib/mysql/mysql.sock
[mysql]
prompt="\\u@mysqldb \\R:\\m:\\s [\\d]> "
no-auto-rehash
[mysqld]
user= mysql
port = 3306
datadir = /data/mysql/
socket = /var/lib/mysql/mysql.sock
pid-file = mysqldb.pid
character-set-server = utf8mb4
skip_name_resolve = 1
# Timestamp
explicit_defaults_for_timestamp = 1
# Connections
back_log = 1024
max_connections = 512
max_connect_errors = 5120
innodb_thread_concurrency = 16
# Limit
open_files_limit = 65535
innodb_open_files = 65535
# Query Cache
query_cache_type = 0
query_cache_size = 0
# binary logs
server-id = 3306001
binlog_format = row
log-bin = /data/mysql/mysql-binlog
expire_logs_days = 7
sync_binlog = 1
max_binlog_size = 1G
binlog_cache_size = 4m
max_binlog_cache_size = 1G
# slow query
slow_query_log = 1
long_query_time = 2
slow_query_log_file = /data/mysql/slow.log
# Timeout
interactive_timeout = 600
wait_timeout = 600
# Engine
default-storage-engine = innodb
# Buffer
key_buffer_size = 32M
read_buffer_size = 1M
sort_buffer_size = 1M
read_rnd_buffer_size = 1M
tmp_table_size = 32M
join_buffer_size = 16M
max_heap_table_size = 32M
max_tmp_tables = 48
thread_cache_size = 32
# Time
log_timestamps = SYSTEM
# Tablespace & File I/O
innodb_data_file_path = ibdata1:1G:autoextend
innodb_file_per_table = 1
# Redo Log
innodb_flush_log_at_trx_commit = 1
innodb_log_file_size = 256M
innodb_log_files_in_group = 2
innodb_log_buffer_size = 16M
# Innodb
innodb_buffer_pool_size = 8G
innodb_buffer_pool_instances = 8
innodb_flush_method = O_DIRECT
innodb_change_buffer_max_size = 50
innodb_max_dirty_pages_pct = 30
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
innodb_io_capacity = 500
innodb_io_capacity_max= 1000
innodb_support_xa = 0
innodb_rollback_on_timeout = 1
优化监控项的数据采集方式,由被动方式改为主动模式(Passive mode -> Active mode)
,主动模式的优势:
NAT
到设备后面;Poller
轮询零负载;如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞8
添加新评论1 条评论
2018-10-09 15:09