Zabbix概念、安装以及快速入门
Zabbix是一个企业级的、开源的、分布式监控解决方案。[1]
- Zabbix可以监控网络和服务的监控状况.
 - Zabbix利用灵活的告警机制,允许用户对事件发送基于Email的告警. 这样可以保证快速的对问题作出相应.
 - Zabbix是零成本的. 因为Zabbix编写和发布基于GPL V2协议. 意味着源代码是免费发布的.
 
Zabbix特性如下[2]:
- 数据收集
 - 灵活的阀值定义
 - 高级告警配置
 - 实时绘图
 - 扩展的图形化显示
 - 历史数据存储
 - 配置简单
 - 模板使用
 - 网络自动发现
 - 快速的web接口
 - Zabbix API
 - 权限系统
 - 全特性、agent易扩展
 - 二进制守护进程
 - 具备应对复杂环境情况
 
可以总结为如下三个特点
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
 
- 修改timezone:
 
或者通过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表示要监测的的信息。
- 详细:https://www.zabbix.com/documentation/2.2/manual/config/items/itemtypes/zabbix_agent
 - 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>。
其中:
- key: 该server定义的item
 - function: https://www.zabbix.com/documentation/2.2/manual/appendix/triggers/functions
 - parameter: 数字n表示n秒,#n表示最近n个值,n[m|h|d]表示n[分钟|小时|天]
 
输入数据如果高于该阈值,触发器就会报警。
6.2.1 创建触发器

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


更多触发器示例:
{www.zabbix.com:system.cpu.load[all,avg1].last()}>5{www.zabbix.com:system.cpu.load[all,avg1].last()}>5|{www.zabbix.com:system.cpu.load[all,avg1].min(10m)}>2{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
- https://www.zabbix.com/documentation/2.2/manual
 - http://zabbix-manual-in-chinese.readthedocs.io/en/latest/index.html
 - http://www.ttlsa.com/zabbix/zabbix-section-3-of-chapter-1/
 - https://www.zabbix.com/documentation/2.2/manual/quickstart
 - 跟着ttlsa一起学zabbix监控
 - 监控 Zabbix
 - http://zabbix.org.cn
 
Zabbix概念、安装以及快速入门的更多相关文章
- docker安装kafka快速入门
		
docker安装kafka快速入门 1.安装zookeeper docker search zookeeperdocker pull zookeeperdocker run -d -v /home/s ...
 - Flask简介,安装,demo,快速入门
		
1.Flask简介 Flask是一个相对于Django而言轻量级的Web框架. 和Django大包大揽不同,Flask建立于一系列的开源软件包之上,这其中 最主要的是WSGI应用开发库Werkzeug ...
 - 001-ant design安装及快速入门【基于纯antd的基本项目搭建】
		
一.安装使用 1.1.安装 推荐使用 npm 或 yarn 的方式进行开发 npm install antd --save yarn add antd 1.2.浏览器引入 在浏览器中使用 script ...
 - Keras深度学习框架安装及快速入门
		
1.下载安装Keras 如果你是安装的Anaconda组合套件,可以直接在Prompt上执行安装命令:pip install keras 注意:最下面为Successfully...表示安装成功! 2 ...
 - MongoDb安装和快速入门
		
1.Mongodb安装 2.mongodb的增删改查 3.MongoDB数据类型 4.Mongodb $关键字 $修改器 5.MongoDB 之 "$" 的奇妙用法 6.Mongo ...
 - (转)Quartz任务调度(1)概念例析快速入门
		
http://blog.csdn.net/qwe6112071/article/details/50991563 Quartz框架需求引入 在现实开发中,我们常常会遇到需要系统在特定时刻完成特定任务的 ...
 - ELK系列(1) - Elasticsearch + Logstash + Kibana + Log4j2快速入门与搭建用例
		
前言 最近公司分了个ELK相关的任务给我,在一边学习一边工作之余,总结下这些天来的学习历程和踩坑记录. 首先介绍下使用ELK的项目背景:在项目的数据库里有个表用来存储消息队列的消费日志,这些日志用于开 ...
 - Linux快速入门01-基础概念
		
4年多前,刚到上海时报过一个关于Oracle的培训班,在那里接触到了Linux,不过一直都没真正去试着使用它.现在经过慢慢的成长,越来越觉得,Linux是每一个服务端工程师必须掌握的系统,即使是现在最 ...
 - 3.1_springboot2.x检索之elasticsearch安装&快速入门
		
1.elasticsearch简介&安装 1.1.1.elasticsearch介绍  我们的应用经常需要添加检索功能,开源的 ElasticSearch 是目前全文搜索引擎的首选.他可以快 ...
 
随机推荐
- 让大蛇(Python)帮你找工作
			
前段时间用Python实现了一个网络爬虫(让大蛇(Python)帮你找工作),效率总体还可以,但是缺点就是每次都需要手动的去触发,于是打算对该爬虫加上Timer,经过网上一番搜索以及API的查询,发现 ...
 - ASP.NET MVC应用程序使用axd格式文件
			
ASP.NET MVC应用程序使用axd格式文件 axd格式文件,不管是在asp.net还是现在开发asp.net MVC应用程序,都是Insus.NET较喜欢使用的. 因为我们可以虚拟一个在应用程序 ...
 - c#实现microsoft账号登入授权(OAuth 2.0)并获取个人信息
			
本博主要介绍microsoft 账号授权(OAuth 2.0)登入并获取用户信息的过程,因为写过google账号授权登入的过程,所以这里就简单介绍一下,google授权登入参考地址:http://ww ...
 - Class Model of Quick Time Plugin
			
Quick Time Plugin 的类图. pdf version: http://pan.baidu.com/s/1o6oFV8Q
 - 红黑树LLRB
			
LLRB——红黑树的现代实现 一.本文内容 以一种简明易懂的方式介绍红黑树背后的逻辑实现2-3-4树,以及红黑树的插入.删除操作,重点在2-3-4树与红黑树的对应关系上,并理清红黑树相关操作的来龙去脉 ...
 - Area 使用
			
[ASP.NET MVC 小牛之路]08 - Area 使用 ASP.NET MVC允许使用 Area(区域)来组织Web应用程序,每个Area代表应用程序的不同功能模块.这对于大的工程非常有用,Ar ...
 - 企业架构研究总结(39)——TOGAF架构能力框架之架构委员会和架构合规性
			
3. 架构委员会 正如前面所说,一个用来对架构治理策略的实现进行监督的跨组织的架构委员会是架构治理策略成功的主要要素之一.架构委员会应该能够代表所有主要干系人的需求,并且通常还需要对整个架构的审查及维 ...
 - Java学习笔记——MySQL的安装使用以及SQL语法简介
			
在 Java 的开发中,数据库的应用是非常必要的,下面,我们为Java对于数据库的应用做一些必要的准备工作.. Java 对数据库的应用统称为 JDBC. JDBC(Java Data Base Co ...
 - 分享Mvc3+NInject+EF+LigerUI权限系统Demo
			
前段时间时不时看到有园友的分享权限系统,于是本人突发奇想,也想写一个玩玩,就利用晚上时间,陆陆续续花了一周多样子,写了如今这个权限系统,这个权限系统具有 组织结构.用户.角色.菜单,组织结构下挂用户, ...
 - MSSQL Rebuild(重建)索引
			
MSSQL Rebuild(重建)索引 前的项目是做数据库的归档,在每次archive后都需要对原数据库的索引进行rebuild,以减少索引碎片,于是乎就自己写了一段sql: DECLARE @tab ...