zabbix

2016-09-19 KasperDeng 更多博文 » 博客 » GitHub »

zabbix devops

原文链接 https://kasperdeng.github.io/zabbix/
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。


简介

在devops的世界,监控比自动化更加的重要。好的监控工具辅助,自然事半功倍,而监控工具可谓百家争鸣。

当然了,有能力、人力、财力,也可以按照 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返回数据。

zabbix-passive-active

安装

  • 方式
    • 可以选择操作系统的包管理器(支持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-bcmathphp-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

{% 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 to debug in /etc/httpd/conf/httpd.conf
  • 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
    • 配置下时区就好了。
  • 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
  • apache log in /var/log/httpd/

  • zabbix 3.0,官方文档只给出了RedHat7/CentOS7的官方respository。虽然有针对RedHat5/6的repo,但是好像已经deprecated,实际上里面缺少了zabbix-server,zabbix-web。
  • php相关的依赖包比较多,大部分在RedHat的官方repo会有,除了php_bcmathphp_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 %}

zabbix-server-not-running

  • Web frontend blocked by 403: Permission Denied
    • check selinux
    • check /var/log/audit/audit.log
    • change SELINUX=enforcing to SELINUX=disable in /etc/selinux/config and reboot
    • setenforce 0 and getenforce or sestatus 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.

Reference