zabbix
原文链接 https://kasperdeng.github.io/zabbix/
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。
简介
在devops的世界,监控比自动化更加的重要。好的监控工具辅助,自然事半功倍,而监控工具可谓百家争鸣。
- 有免费开源:nagios, OpenNMS
- 商业开源:zabbix
- 免费不开源:cloud insight
- SasS-based:Datadog, Hosted Graphite
当然了,有能力、人力、财力,也可以按照 statsd/collectd + graphite/influxDB/openTSDB + grafana
的模式构建自己的监控系统,其实很多初创团队利用这些免费开源的工具构造一体化(all in one)的免费不开源/提供企业收费服务的工具。
zabbix是一款开源的网络及应用监控的工具,愿景是给业界提供高级的监控管理方案。最早发布于2001年,2005年成立专职公司为企业级客户提供强大的技术支持。 是一款可靠的监控工具,方便devops团队的高效协助与沟通,数据的可视化效果,告警的方式,丰富的apis可用于自动化运维。 社区与论坛活跃,强大,wiki资源丰富。 国内有不少选其作为监控的方案,唯品会,京东,PPTV。
不过,正如esty
所说,一切监控软件最后都发展成又一个nagios。所以寻找当下最合适的就好了。
- 特点
- 分布式监控
- 自动发现功能(LLD - Low-level discovery)
- discovery of file systems (vfs.fs.discovery)
- discovery of network interfaces (net.if.discovery)
- discovery of CPUs and CPU cores (system.cpu.discovery)
- discovery of SNMP OIDs (discovery[{#MACRO1}, oid1, {#MACRO2}, oid2, …,])
- discovery using ODBC SQL queries (db.odbc.discovery[,])
- discovery of Windows services (service.discovery)
- 监控方式:agentd, snmp, jmx, impi
- 告警机制,趋势预测,预警故障
- 模板式定义需采集的测量值,支持宏定义
- 丰富的api 给自动化运维和二次开发提供了强有力的支持
- 生态健全,插件丰富,方便对接各种系统和前端展示页面(e.g. grafana)
- 缺点
- 相对graphite, influxDB, openTSDB来说,一切数据是只读的,只是依赖输入的数据做可视化,但不能对数据进行运算(切片,聚合)。
- 注意事项
- 对弈监控的机器数量或者指标快速增加的场景,一定要考虑接收数据的量,服务端性能(与数据库的交互),zabbix proxy的数量。力求减轻服务端的压力,避免内存积压。
zabbix是采用C语言实现的,采用的是LAMP(Linux + Apache + MySQL + PHP)
的组建方式。
zabbix最常用的是通过被监控机上运行的agentd进行探针式数据采集,提供了被动方式(passive)和主动方式(active)。基于json格式进行数据传输。
- 主动:agent请求server,根据配置的
RefreshActiveChecks
间隔主动获取监控项列表,并主动将监控项内需要检测的数据提交给server/proxy。 - 被动:server向agent请求获取监控项的数据,agent返回数据。
安装
- 方式
- 可以选择操作系统的包管理器(支持RedHat7/CentOS7 yum 和 Debian7&8 or Ubuntu 14.04LTS&16.04LTS的apt),通过官方的repository进行安装。
- 通过源码安装。
- 对于3.0以上版本,更提供了docker,更加的便捷。
- 包管理器方式安装
- RedHat/CentOS的包依赖:
- fping, iksemel, libssh2 packages
- zabbix官方提供了相关的包,在http://repo.zabbix.com/non-supported/rhel/7/x86_64/,只针对x64。
- 安装过程中还发现依赖
php-bcmath
和php-mbstring
,具体小版本,可以根据yum的依赖检查的信息在http://rpm.pbone.net/搜索下载 - 以上的包最方便的方式还是自己建yum repo
{% highlight bash %} copy all dependent rpms to ~/repo/packages shell>yum install -y createrepo shell>createrepo ~/repo/packages shell>create zabbix.repo in /etc/yum.repo.d/ {% endhighlight %}
{% highlight bash %} [ece-zabbix] name=ece-zabbix baseurl=file:///root/repo/ enabled=1 gpgcheck=0 metadata_expire=0 cost=500 {% endhighlight %}
- PHP版本:zabbix3.0要求PHP 5.4以上版本,不支持PHP7. RedHat6/CentOS6 官方repo只有php5.3.3,需要利用三方源升级到php5.4。
- RedHat6/CentOS6升级php
- 下载相关的php包(看下面的例子):https://repo.webtatic.com/yum/el6/x86_64/ 并用createrepo创建本地的php repo
- RedHat6/CentOS6升级php
{% highlight bash %} yum erase php php-bcmath php-cli php-common php-gd php-mbstring php-mysql php-pdo php-xml yum install php56w php56w-bcmath php56w-cli php56w-common php56w-gd php56w-mbstring php56w-mysql php56w-pdo php56w-xml {% endhighlight %}
- 数据库
- Zabbix 支持使用MySQL和Postgres
- MySQL-server最好安装5.6以上版本,其他版本性能偏低。
启动服务:出于安全考虑,最好创建
zabbix
用户和用户组,用来启动server/agent的服务systemctl start zabbix-server
systemctl start httpd
- 源码安装,基于RedHat
依赖工具:
{% highlight bash %} yum install -7 gcc.x686_64 make.x686_64 mysql-devel.x686_64 libxml2-devel.x686_64 net-snmp-devel.x686_64 libcurl-devel.x686_64 {% endhighlight %}
- php version
- zabbix 3.0: > PHP5.4
- zabbix 2.2: PHP3
- PHP Web Frontend install
- check whether selinux blocks apache/httpd access
getenforce
/setenforce 0/1
getsebool <flagName> or -a
/sesebool -P <flagName> <value>
- sestatus
- check apache/httpd error log
/var/log/httpd/error_log
- set
LogLevel
todebug
in/etc/httpd/conf/httpd.conf
- set
- check whether selinux blocks apache/httpd access
- reference: http://www.hi-linux.com/2016/03/29/CentOS%206%E4%B8%8B%E5%AE%89%E8%A3%85Zabbix%203.0/
- 源码安装需要自己封一套脚本在
/etc/init.d/
,可以参考现有的zabbix-server & zabbix-agent的rpm包里面的
configuration
- zabbix server
- config location
- Package Installation:
/etc/zabbix/zabbix_server.conf
- Source Installation:
/usr/local/etc/zabbix_server.conf
and/usr/local/etc/zabbix_agentd.conf
- 主要配置数据库的host,数据库名称,用户名,密码
- zabbix frontend
- 主要是用apache,配置在
/etc/httpd/conf.d/zabbix.conf
- 配置下时区就好了。
- 主要是用apache,配置在
- zabbix agentd
- 没什么好说的,奉行简单化风格,尽量对被监控机无侵入,已支持重用指标的收集。
- 配好zabbix server的地址。
- 创建zabbix用户启动agent。
{% highlight bash %} groupadd zabbix useradd -g zabbix zabbix {% endhighlight %}
- theme
- 还是深色的比较炫,比较专业的样子。
- screen
- 可以在页面中自定义构建监测视图。
log
- server/agent logs location
- Package Installation:
/var/log/zabbix/
- Source Installation: default in
/tmp/zabbix_server.log
, value is set in/usr/local/etc/zabbix_server.conf
- Package Installation:
- apache log in
/var/log/httpd/
坑
- zabbix 3.0,官方文档只给出了RedHat7/CentOS7的官方respository。虽然有针对RedHat5/6的repo,但是好像已经deprecated,实际上里面缺少了zabbix-server,zabbix-web。
- RHEL7 repo
- RHEL6 repo
- RHEL5 repo
- 针对RedHat6/CentOS X64,有github project做了相关的rpm包
- https://github.com/zabbixcn/zabbix3.0-rpm
- php相关的依赖包比较多,大部分在RedHat的官方repo会有,除了
php_bcmath
和php_mbstring
。自行搜索下载的时候注意版本,php所有相关的包都是要align在统一的小版本上的, 比如5.3.3-46.el6_7.1
,如果你下载的不是一个版本的话,yum安装的时候会出现Dependency Resolution
问题。 - mysql数据库用简单的mysql server就好了。曾尝试用mysql cluster,遇到不少问题。
- 官方的sql要求用的engine是innodb,若狗所用的mysql cluster是NDBCLUSTER做storage engine的话需要打开innodb support,才能顺利导入zabbix的schema, data ...
- zabbix2.2 web setup的时候要测试和mysql的连接,但用mysql cluster的话死活连不过去,而且不能next去下一步。但3.0的版本只需要填数据库信息,不需要测试连接性,关键能next啊,与数据连接有问题的话后面再改配置呗。
- zabbix dashboard显示"zabbix server is not running"
- 原因: blocked by SELINUX
{% highlight bash %} shell>tail -f /var/log/audit/audit.log r:zabbix_agent_port_t:s0 tclass=tcp_socket type=SYSCALL msg=audit(1474187313.154:2439): arch=c000003e syscall=42 success=no exit=-13 a0=c a1=7f800b6ec850 a2=1c a3=ff00 items=0 ppid=2048 pid=2057 auid=500 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty= (none) ses=2 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null) type=AVC msg=audit(1474187313.154:2440): avc: denied { name_connect } for pid=2057 comm="httpd" dest=10050 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:zabbix_agent_port_t:s0 tclass=tcp_socket
shell> /usr/sbin/getsebool -a | grep httpd allow_httpd_anon_write --> off allow_httpd_mod_auth_ntlm_winbind --> off allow_httpd_mod_auth_pam --> off allow_httpd_sys_script_anon_write --> off httpd_builtin_scripting --> on httpd_can_check_spam --> off httpd_can_network_connect --> off httpd_can_network_connect_cobbler --> off httpd_can_network_connect_db --> off httpd_can_network_memcache --> off httpd_can_network_relay --> off httpd_can_sendmail --> off httpd_dbus_avahi --> on httpd_dbus_sssd --> off httpd_enable_cgi --> on httpd_enable_ftp_server --> off httpd_enable_homedirs --> off httpd_execmem --> off httpd_manage_ipa --> off httpd_read_user_content --> off httpd_run_preupgrade --> off httpd_run_stickshift --> off httpd_serve_cobbler_files --> off httpd_setrlimit --> off httpd_ssi_exec --> off httpd_tmp_exec --> off httpd_tty_comm --> on httpd_unified --> on httpd_use_cifs --> off httpd_use_fusefs --> off httpd_use_gpg --> off httpd_use_nfs --> off httpd_use_openstack --> off httpd_verify_dns --> off
shell> setsebool -P httpd_can_connect_zabbix on // Zabbix 3.x新增加的SE bool shell> setsebool -P httpd_can_network_connect on // for version < zabbix 3.x {% endhighlight %}
- Web frontend blocked by
403: Permission Denied
- check selinux
- check
/var/log/audit/audit.log
- change
SELINUX=enforcing
toSELINUX=disable
in/etc/selinux/config
and reboot setenforce 0
andgetenforce
orsestatus
to get current mode status- check the security context of PHP file. The type is
httpd_user_content_t
ls -Z /var/www/html/zabbix
- check the owernship and file mode of your PHP file content. apache needs execution permission.