Zabbix是一个企业级的、开源的、分布式监控解决方案。[1]

  • Zabbix可以监控网络和服务的监控状况.
  • Zabbix利用灵活的告警机制,允许用户对事件发送基于Email的告警. 这样可以保证快速的对问题作出相应.
  • Zabbix是零成本的. 因为Zabbix编写和发布基于GPL V2协议. 意味着源代码是免费发布的.

Zabbix特性如下[2]:

  1. 数据收集
  2. 灵活的阀值定义
  3. 高级告警配置
  4. 实时绘图
  5. 扩展的图形化显示
  6. 历史数据存储
  7. 配置简单
  8. 模板使用
  9. 网络自动发现
  10. 快速的web接口
  11. Zabbix API
  12. 权限系统
  13. 全特性、agent易扩展
  14. 二进制守护进程
  15. 具备应对复杂环境情况

可以总结为如下三个特点

1)灵活的通知机制:allows users to configure e-mail based alerts for virtually any event;

2)数据可视化;

3)所有报告、统计、参数配置都可通过web端完成;

所以zabbix很适合服务器集群管理员进行功能规划(capacity planning)

1 概览

  • 架构

    • Server
    • database storage
    • web interface
    • proxy
    • agent
  • 数据流(data flow)

其中,Zabbix Server为中心组件,用来获取agent存活状况及监控数据和统计. 所有的配置、统计、操作数据均通过Server进行存取.

Zabbix agent部署在被监控机器上用来监控本地资源和应用(如硬盘、内存、处理器统计等)

2 术语概念

2.1 server / client / proxy

Zabbix server的功能可以分为三部分:server、web前端和database。

Server执行polling和trapping来采集数据,评估是否触发触发器,发送报警给用户

agent向其报告有效数据和统计。

database存储所有configuration, statistical and operational data。

server和web前端都与database进行交互。

Zabbix server以守护(daemon)进程方式运行

2.2 命令行工具

Sender / Get

3 zabbix进程构成 [3]

默认情况下zabbix包含5个程序:
zabbix_agentd、zabbix_get、zabbix_proxy、zabbix_sender、zabbix_server,另外一个zabbix_java_gateway是可选 zabbix_agentd
客户端守护进程,此进程收集客户端数据,例如cpu负载、内存、硬盘使用情况等 zabbix_get
zabbix工具,单独使用的命令,通常在server或者proxy端执行获取远程客户端信息的命令。
通常用户排错。例如在server端获取不到客户端的内存数据,我们可以使用zabbix_get获取客户端的内容的方式来做故障排查。 zabbix_sender
zabbix工具,用于发送数据给server或者proxy,通常用于耗时比较长的检查。
很多检查非常耗时间,导致zabbix超时。于是我们在脚本执行完毕之后,使用sender主动提交数据。 zabbix_server
zabbix服务端守护进程。
zabbix_agentd、zabbix_get、zabbix_sender、zabbix_proxy、zabbix_java_gateway的数据最终都是提交到server
备注:当然不是数据都是主动提交给zabbix_server,也有的是server主动去取数据。 zabbix_proxy
zabbix代理守护进程。功能类似server,
唯一不同的是它只是一个中转站,它需要把收集到的数据提交/被提交到server里。 zabbix_java_gateway
zabbix2.0之后引入的一个功能。顾名思义:Java网关,类似agentd,但是只用于Java方面。
需要特别注意的是,它只能主动去获取数据,而不能被动获取数据。它的数据最终会给到server或者proxy。

4 安装zabbix

首先安装MariaDB数据库。Linux发行版,使用repository configuration tool,选择自己合适的安装步骤。

  • 卸载mysql

如果已经安装了mysql,需要先卸载mysql,否则安装过程中会出现冲突。

  • 本机选择10.1stable for centos7 x86_64
//添加源
shell> cat /etc/yum.repos.d/mariaDB.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1 shell> yum install MariaDB-server MariaDB-client mariadb //服务管理,使用如下命令start/stop MariaDB:
shell> sudo systemctl start mariadb.service #直接用mariadb也行
shell> sudo systemctl stop mariadb.service
shell> sudo systemctl enable mariadb.service #开机自启动

从10.1起,Galera Cluster(同步MariaDB数据库的多master集群的工具)默认包含在MariaDB中。

see also Installing MariaDB with yum.

4.1 zabbix sever [4]

安装

shell> rpm -ivh http://repo.zabbix.com/zabbix/2.2/rhel/7/x86_64/zabbix-release-2.2-1.el7.noarch.rpm
//for Zabbix server and web frontend with mysql database
shell> yum install zabbix-server-mysql zabbix-web-mysql
//可以将server与agent安装在同一台机器
shell> yum install zabbix-agent

创建zabbix数据库以及远程用户

[user@host ~]# mysql -uroot -p

MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'your_password';
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@'172.16.%.%' identified by 'your_password';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> select host,user from mysql.user;
+-----------------------+--------+
| host | user |
+-----------------------+--------+
| 127.0.0.1 | root |
| 172.16.%.% | zabbix |
| ::1 | root |
| localhost | |
| localhost | fsj |
| localhost | root |
| localhost | zabbix |
| localhost.localdomain | |
+-----------------------+--------+
  • 导入初始化schema和data
shell> cd /usr/share/doc/zabbix-server-mysql-2.2.15/create
shell> mysql -uroot -p zabbix < schema.sql
shell> mysql -uroot -p zabbix < images.sql
shell> mysql -uroot -p zabbix < data.sql
  • Edit database configuration in zabbix_server.conf
shell> vi /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
  • 开启zabbix-server服务:systemctl start zabbix-server

  • Editing PHP configuration for Zabbix frontend

    • 修改timezone:php_value date.timezone Asia/Shanghai
    • 重启httpd服务:service httpd restart

或者通过sed调整php配置[6]

shell> sed -i 's/^.*date.timezone =.*$/date.timezone = Asia\/Shanghai/g' /etc/php.ini
shell> sed -i 's/^.*post_max_size =.*$/post_max_size = 16M/g' /etc/php.ini
shell> sed -i 's/^.*max_execution_time =.*$/max_execution_time = 300/g' /etc/php.ini
shell> sed -i 's/^.*max_input_time =.*$/max_input_time = 300/g' /etc/php.ini
shell> sed -i 's/^.* memory_limit =.*$/memory_limit = 128M/g' /etc/php.ini
shell> service httpd restart
  • 配置服务开机启动
shell> chkconfig zabbix-server on
shell> chkconfig zabbix-agent on
shell> chkconfig httpd on

访问 http://your-zabbix-server-ip/zabbix

默认username/password 是Admin/zabbix.

  • 如果出现错误:zabbix server is not running

解决办法:设置SELinux 成为permissive模式 shell> setenforce 0

  • 如果出现防火墙相关问题,打开agent的端口
查看zabbix监听端口:
shell> netstat -nlop | grep zabbix
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 23904/zabbix_server off (0.00/0/0)
tcp6 0 0 :::10051 :::* LISTEN 23904/zabbix_server off (0.00/0/0)
打开防火墙该端口:
shell> iptables -I INPUT -p tcp --dport 10051 -m state --state NEW,ESTABLISHED -j ACCEPT
shell> iptables -I OUTPUT -p tcp --sport 10051 -m state --state ESTABLISHED -j ACCEPT

也可以批量修改其他端口:

shell> iptables-save > firewalls.txt
shell> vim firewalls.txt
shell> iptables-restore <firewalls.txt

或者直接关闭防火墙:# systemctl stop firewalld

see also Linux防火墙配置(iptables, firewalld)

4.2 zabbix agent

shell> sudo rpm -ivh http://repo.zabbix.com/zabbix/2.2/rhel/7/x86_64/zabbix-release-2.2-1.el7.noarch.rpm
shell> sudo yum install zabbix-agent zabbix-sender -y
shell> grep -Ev '(^$|^#)' /etc/zabbix/zabbix_agentd.conf #修改server地址
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=172.16.44.5
Hostname=Zabbix server fsj
Include=/etc/zabbix/zabbix_agentd.d/ shell> sudo service zabbix-agent start
shell> sudo systemctl enable zabbix-agent

5 用户管理

权限管理并不是直接设置一个user对应于一个host的什么权限,而是设置user groups对应与host groups的权限。

切换到permissions选项卡

6 开始监控

6.1 添加Zabbix agent(局域网其他机器)以及其item

新建host

其中,最好有一个Host name项和/etc/zabbix/zabbix_agentd.conf中Hostname保持一致。

如果不存在host与配置文件中的Hostname相同,那么运行之后log文件会报错host xxx(Hostname值) not found,但是前端host条目依然可以获取到数据。

修改conf文件后要重启服务才能生效

新建item

其中key表示要监测的的信息。

  1. 详细:https://www.zabbix.com/documentation/2.2/manual/config/items/itemtypes/zabbix_agent
  2. Items supported by platform

在configuration->hosts页面可看到刚刚添加的host,如果available项为绿色Z表示一切正常。

有可能出现如下错误

Received empty response from Zabbix Agent at [x.x.x.x]. Assuming that agent dropped connection because of access permission

到Monitoring -> Latest data页面查看监控到的实时数据

点击graph可以查看cpu load的折线图。

6.2 触发器

一个触发器包括一个定义了数据阈值的表达式

格式为{<server>:<key>.<function>(<parameter>)}<operator><constant>

其中:

  1. key: 该server定义的item
  2. function: https://www.zabbix.com/documentation/2.2/manual/appendix/triggers/functions
  3. parameter: 数字n表示n秒,#n表示最近n个值,n[m|h|d]表示n[分钟|小时|天]

输入数据如果高于该阈值,触发器就会报警。

6.2.1 创建触发器

激活触发器 shell> cat /dev/urandom | md5sum

更多触发器示例:

  1. {www.zabbix.com:system.cpu.load[all,avg1].last()}>5
  2. {www.zabbix.com:system.cpu.load[all,avg1].last()}>5|{www.zabbix.com:system.cpu.load[all,avg1].min(10m)}>2
  3. {www.zabbix.com:vfs.file.cksum[/etc/passwd].diff()}=1

6.2.2 通知

Administration -> Media type 设置 email(需要有email软件支持)

新建action

查看发送情况

这里没有设email相关,所以发送失败

7 使用模版

点击host,切换到templates选项卡可以关联想要的模版。

我们也可以通过 Configuration → Templates 可以创建空模版。然后把现有的item、trigger等拷贝到该模版,方便以后批量应用。

References

  1. https://www.zabbix.com/documentation/2.2/manual
  2. http://zabbix-manual-in-chinese.readthedocs.io/en/latest/index.html
  3. http://www.ttlsa.com/zabbix/zabbix-section-3-of-chapter-1/
  4. https://www.zabbix.com/documentation/2.2/manual/quickstart
  5. 跟着ttlsa一起学zabbix监控
  6. 监控 Zabbix
  7. http://zabbix.org.cn

Zabbix概念、安装以及快速入门的更多相关文章

  1. docker安装kafka快速入门

    docker安装kafka快速入门 1.安装zookeeper docker search zookeeperdocker pull zookeeperdocker run -d -v /home/s ...

  2. Flask简介,安装,demo,快速入门

    1.Flask简介 Flask是一个相对于Django而言轻量级的Web框架. 和Django大包大揽不同,Flask建立于一系列的开源软件包之上,这其中 最主要的是WSGI应用开发库Werkzeug ...

  3. 001-ant design安装及快速入门【基于纯antd的基本项目搭建】

    一.安装使用 1.1.安装 推荐使用 npm 或 yarn 的方式进行开发 npm install antd --save yarn add antd 1.2.浏览器引入 在浏览器中使用 script ...

  4. Keras深度学习框架安装及快速入门

    1.下载安装Keras 如果你是安装的Anaconda组合套件,可以直接在Prompt上执行安装命令:pip install keras 注意:最下面为Successfully...表示安装成功! 2 ...

  5. MongoDb安装和快速入门

    1.Mongodb安装 2.mongodb的增删改查 3.MongoDB数据类型 4.Mongodb $关键字 $修改器 5.MongoDB 之 "$" 的奇妙用法 6.Mongo ...

  6. (转)Quartz任务调度(1)概念例析快速入门

    http://blog.csdn.net/qwe6112071/article/details/50991563 Quartz框架需求引入 在现实开发中,我们常常会遇到需要系统在特定时刻完成特定任务的 ...

  7. ELK系列(1) - Elasticsearch + Logstash + Kibana + Log4j2快速入门与搭建用例

    前言 最近公司分了个ELK相关的任务给我,在一边学习一边工作之余,总结下这些天来的学习历程和踩坑记录. 首先介绍下使用ELK的项目背景:在项目的数据库里有个表用来存储消息队列的消费日志,这些日志用于开 ...

  8. Linux快速入门01-基础概念

    4年多前,刚到上海时报过一个关于Oracle的培训班,在那里接触到了Linux,不过一直都没真正去试着使用它.现在经过慢慢的成长,越来越觉得,Linux是每一个服务端工程师必须掌握的系统,即使是现在最 ...

  9. 3.1_springboot2.x检索之elasticsearch安装&快速入门

    1.elasticsearch简介&安装 1.1.1.elasticsearch介绍 ​ 我们的应用经常需要添加检索功能,开源的 ElasticSearch 是目前全文搜索引擎的首选.他可以快 ...

随机推荐

  1. 关于ListView中convertView的缓存个数的探究

    在面试的时候经常会被问到一个有关ListView的问题:一个ListView的高度最多可以显示5个item,但是却有20条数据要显示,问最多会有多少个convertView会被复用?或者如在ListV ...

  2. MVC 5.1的遭遇:“已添加了具有相同键的项”

    ASP.NET MVC 3升级至MVC 5.1的遭遇:“已添加了具有相同键的项”   最近将一个项目从ASP.NET MVC 3升级至刚刚发布的ASP.NET MVC 5.1,升级后发现一个ajax请 ...

  3. 玩转python之测试一个对象是否是类字符串

    提到类型测试,我首先想到python中“鸭子类型”的特点,所谓鸭子类型,即如果它走路像鸭子,叫声也像鸭子, 那么对于我们的应用而言,就可以认为它是鸭子了!这一切都是为了功能复用. 我们总是需要测试一个 ...

  4. 浅谈DevExpress<二>:设计一个完整界面(1)

    昨天谈了界面的换肤问题,今天拿一个简单的界面来介绍一下怎么设计一个五脏俱全的界面,总体效果如下图(种类的图片随便找的^^):

  5. 监控系统Opserver

    监控系统Opserver的配置调试   Stack Exchange开源其监控系统Opserver有一段时间了.之前在项目中用过他们的MiniProfile来分析页面执行效率和帮助新人了解项目,当他们 ...

  6. 【译】Experienced programmers but new to Objective-C(一)

    注:这是raywenderlich博客上的一个系列文章.是写给从其他语言转到OC语言上的程序员的,一共5节.最近打算学习一下,并且把一些重要的知识点摘抄并且尝试翻译一下,第一次翻译,有些原文如果不知道 ...

  7. poj3083走玉米地问题

    走玉米地迷宫,一般有两种简单策略,遇到岔路总是优先沿着自己的左手方向,或者右手方向走.给一个迷宫,给出这两种策略的步数,再给出最短路径的长度. ######### #.#.#.#.# S....... ...

  8. 初试weka数据挖掘

    初试weka数据挖掘 Posted on 2013-09-07 13:26 DM张朋飞 阅读(321) 评论(7) 编辑 收藏 偶然间在网上看到了一篇关于weka好的博文,就记录了下来…… weka下 ...

  9. avalon - 初步接触

    avalon - 初步接触 avalon的介绍http://rubylouvre.github.io/mvvm/ 按照作者的介绍,在HTML中添加绑定,在JS中用avalon.define定义View ...

  10. jvm回收方法区

    很多人认为方法区(或者HotSpot虚拟机中的永久代)是没有垃圾收集的,Java虚拟机规范中确实说过可以不要求虚拟机在方法区实现垃圾收集,而且在方法区进行垃圾收集的“性价比”一般比较低:在堆中,尤其是 ...