为什么需要监控系统? 为用户提供文档、高校、安全的服务
监控系统功能:数据采集、数据保存、图像展示、报警系统(告警策略、告警发送)
收集数据可以通过客户端、SNMP协议等
Zabbix数据收集的方式
Zabbix数据展示
Zabbix故障检测
Zabbix告警发送
Zabbix安全和认证
Zabbix自动化
Zabbix API
Zabbix4.0特性
Zabbix Agent:Zabbix客户端,负责数据收集上传
Zabbix Server:Zabbix的服务端,负责数据汇总,处理,告警策略,告警发送等等
Zabbix Web:Zabbix前端页面,提供了友好的展示和操作界面,负责数据的展示,监控系统的配置管理,用户权限配置管理等功能
Database:数据和配置存储数据库,Zabbix支持多种数据库,包括MySQL,Oracle,DB2等等
Java GateWay:Java网关,负责通过JMX监控收集Java应用性能数据
Zabbix Proxy:Zabbix代理,分布式部署架构会用到,主要是收集设备的监控数据并将数据发送给对应的Zabbix Server
流程:数据通过Zabbix客户端收集并发送给Zabbix服务端,Zabbix服务端负责存储、分析数据、触发告警等功能,用户或管理员可以通过Zabbix前端页面进行数据展示和配置管理。如果设备规模较多,分布在多地域、多机房都可以通过Zabbix Proxy实现分布式架构部署
数据收集之后是通过以下进程进行处理
数据告警
分布式
自动发现
frontend | 前端 |
Zabbix API | Zabbix的接口 |
Zabbix Server | Zabbix服务端 |
Zabbix Proxy | Zabbix代理 |
Network discovery | 网络自动发现 |
Active agent auto-registration | 主动Agent自动注册 |
Low-level discovery | 低级自动发现 |
host | 主机 |
host group | 主机组 |
item | 监控项 |
value preprocessing | 预处理 |
template | 模板 |
application | 应用 |
web scenario | web场景 |
Macros | 宏 |
item 监控项,监控 CPU使用率,负责,网卡接收流量等
value preprocessing 监控数据预处理,就是数据再存入数据库之前按照指定的规则预处理,比如处理成数据的变换量,数据的的每秒变化速率,或者是单位的换算,从ms算成s
application 应用,一组监控项的逻辑分组,比如Nginx的监控项统一分到Nginx应用中
template 模板,就是可以应用多个监控设备的监控集合,包含监控项,触发器,图形,LLD,web监控等等。 同一类的监控就可以整理成模板,从而可以重复利用,大幅度提高了监控的效率
web scenario web场景,是监控Web的一个或多个http请求,一个场景中可以是单个URL,也可以是多个URL。 比如可以将用户登录,搜索,点击商品详情,加入购物车等操作放入一个场景进行监控,当所有的步骤都成功,该场景的监控才是成功的
Macros 宏,可以认为是一个变量,可以应用在告警,模板等功能中
graph | 图表 |
screen | 聚合图表 |
maps | 拓扑图 |
Slide | 幻灯片演示 |
graph 图表,可以将一个或多个监控项的监控数据放入同一张图表中,比如将CPU的用户使用率、系统使用率、空闲率都放入到PCU监控图表中
screen 聚合图表,就是将多个graph聚在一张监控大屏中,比如将CPU、网卡、内存、IO这些图表放在一起,就组成了主机的聚合图表
maps 网络拓扑图,Zabbix还支持拓扑图展示监控,并在拓扑图加入对应的监控指标,当该监控项异常时,拓扑图也会显示异常,很方便定位问题
slide show 幻灯片播放,每隔一段时间轮流播放多个聚合图表,可以实现将主机、网络、存储、缓存、数据库的各个聚合图表轮流播放
Trigger | 触发器 |
event | 事件 |
problem | 异常状态 |
OK | 正常状态 |
action | 操作 |
escalation | 升级 |
media | 媒介 |
notification | 通知 |
remote command | 远程命令 |
Maintenance | 维护模式 |
Trigger 触发器,告警的策略设置,可以分别设置正常状态和异常状态触发器,比如CPU持续5分钟使用率超过80%就触发告警
event 事件,比如告警状态的变化,自动发现策略生效,客户端注册成功等等这些都是事件,当CPU持续5分钟使用率超过80%就触发告警,触发器状态会从OK变成Problem,这就是一个事件
action 操作,是根据事件以及条件定义的一系列动作,当CPU告警发生时,可以触发一个操作,这操作是发送告警信息给管理员,让他及时处理 。 操作也可以是服务重启
escalation 升级,是在一个动作内执行的操作,告警的升级操作就是通过这个实现,比如上面的告警信息发送就是一个escalation
media 媒介,指告警通知的方式,短信,邮件,微信等等
remote command 远程命令,指预先定义的,在指定条件下会被执行的命令
Maintenance 维护模式,就是系统升级或者维护的时间段,该时间段可以不发送告警,或者发送告警,但是不计入服务可用性
User | 用户 |
User Group | 用户组 |
permission | 权限 |
User Type | 用户类型 |
二进制 源码 docker 三种安装方式
资源要求
环境准备
vmware
CentOS 7.6 http://mirrors.163.com/centos/7.6.1810/isos/x86_64/CentOS-7-x86_64-DVD-1810.iso
安装Zabbix服务端
安装Zabbix前端(php,web server)
安装Zabbix数据库
安装Zabbix客户端
二进制包是已经经过编译,可以直接运行的程序软件。rpm包就是二进制包的一种,二进制包的特点是安装简单,方便。缺点可定制性不足
二进制包安装-命令列表
基础配置
初始化CentOS 7.6
添加镜像源、关闭防火墙
centos 7 添加阿里云镜像,加速一下操作系统的一些软件包的安装,镜像配置覆盖操作系统本身
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo # wget -O 指定文件名
yum install epel-release # 安装基础镜像里所不包含的常用的软件
安装常用的开发组件
yum groups install "Development Tools"
yum groups info "Development Tools"
增加Zabbix镜像源
rpm -ivh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
关闭SElinux
systemctl stop firewalld.service
systemctl disable firewalld.service #禁止开机启动
vim /etc/selinux/config
SELINUX=disabled
yum install iptables-services
开始 安装Zabbix Server和Frontend和MySQL
安装Zabbix Server和Frontend
yum install zabbix-server-mysql
yum install zabbix-web-mysql
安装MySQL mariadb可以是mysql的一个分支,可以理解为mysql
yum install mariadb-server
systemctl start mariadb.service
systemctl status mariadb.service
mysql_secure_installation # 运行这条命令,进行一些数据初始化设置,我这里就不设置密码了,直接回车
创建Zabbix数据库
mysql -uroot -p
create database zabbix character set utf8 collate utf8_bin;
创建用户
grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix@findsec123';
刷新权限
flush privileges;
导入Zabbix数据库的表结构以及相关的数据
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -pzabbix@findsec123 zabbix
登进去show databases; use zabbix; show tables;
配置Zabbix Server
vim /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix@findsec123
启动Zabbix Server
systemctl start zabbix-server.service
systemctl status zabbix-server.service
more /var/log/zabbix/zabbix_server.log
配置Zabbix frontend
vim /etc/php.ini # 有注释的注释去掉,数字不同的改掉
max_execution_time = 300
memory_limit = 128M
post_max_size = 16M
upload_max_filesize = 2M
max_input_time = 300
max_input_vars = 10000
always_populate_raw_post_data = -1
date.timezone = Asia/Shanghai
启动httpd
systemctl start httpd.service
systemctl status httpd.service
http://192.168.93.145/zabbix/setup.php
安装过程中的数据库用户名和密码是上面所设置的
Zabbix server details的Name:Zabbix Server
用户名:Admin
默认密码:zabbix
安装Zabbix Agent
yum install zabbix-agent
vim /etc/zabbix/zabbix_agentd.conf 检查三个东西,确认ServerActive和Server是否填写正确,还有hostname要与之前的保持一致
systemctl start zabbix-agent.service
启动失败排查:
5月 11 20:26:05 bogon systemd[1]: zabbix-server.service failed.
[root@bogon ~]# getenforce
Enforcing
[root@bogon ~]# setenforce 0
[root@bogon ~]# getenforce
Permissive
这个名字Zabbix Server要和待会zabbix agent的hostname 需要相匹配
用户名:Admin
默认密码:zabbix
systemctl start zabbix-server.service
systemctl start mariadb.service
systemctl start httpd.service
systemctl start zabbix-agent.service
源码包是需要进行编译以后才能够生成可运行的二进制程序,源码包它是包含了程序的源代码。源码包安装的特点:可以定制功能和参数。缺点是它需要编译安装容易出错,并且安装时间消耗较长的时间
docker 主要是基于linux的容器技术,实现的进程级别的虚拟化,将应用和所依赖的库都封装在容器当中,对应用来说,资源都是独立的并且隔离的,由于容器的可持续部署和隔离性,一般在企业的生产环境都是选择容器,源码包的安装方式居多 或者 定制企业自己的二进制包
安装Zabbix服务端
安装Zabbix前端(php,web server)
安装Zabbix数据库
安装Zabbix客户端
Zabbix Server采用源码包安装,前端web和数据库以及agent采用二进制的安装
源码包安装-命令列表
下载zabbix server源码包
wget -O zabbix-4.0.4.tar.gz https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/4.0.4/zabbix-4.0.4.tar.gz/download
安装zabbix依赖包
yum install wget telnet net-tools python-paramiko gcc gcc-c++ dejavu-sans-fonts python-setuptools python-devel sendmail mailx net-snmp net-snmp-devel net-snmp-utils freetype-devel libpng-devel perl unbound libtasn1-devel p11-kit-devel OpenIPMI unixODBC libevent-devel mysql-devel libxml2-devel libssh2-devel OpenIPMI-devel java-1.8.0-openjdk-devel openldap-devel curl-devel unixODBC-devel
解压并编译安装
tar -zxvf zabbix-4.0.4.tar.gz
cd zabbix-4.0.4/
建立编译安装目录
mkdir -p /data/findsec/zabbix
./configure --prefix=/data/findsec/zabbix --enable-server --enable-agent --enable-java --with-mysql --with-libxml2 --with-unixodbc --with-net-snmp --with-ssh2 --with-openipmi --with-ldap --with-libcurl --with-iconv
# prefix是指定安装的目录,默认是按照到/usr/local下的
# 这里安装的是server,所以是 --enable-server 如果是proxy就 enable-proxy
# java监控,mysql后端数据库,net-snmp网络监控,openipmi硬件相关的监控,ldap认证,libcurl是web监控
make
make install
cd /data/findsec/zabbix/
tree . 查看zabbix下的目录结构
验证安装是否成功:/data/findsec/zabbix/sbin/zabbix_server -V
可以看道是 4.0.5版本
前端web和数据库以及agent采用二进制的安装
数据库安装
yum install mariadb-server
systemctl start mariadb.service
systemctl status mariadb.service
mysql_secure_installation 初始化诗句哭
是否设置root密码 n
是否删除匿名用户 Y
是否禁止root远程登录 n
删除测试数据库 Y
重新加载权限 Y
创建数据库
mysql -uroot -p
create database zabbix character set utf8 collate utf8_bin;
grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix@findsec123';
导入数据结构,zabbix源码包安装的数据库表结构是在源码包里面的,导入schema表结构,导入images,导入data
mysql -uzabbix -pzabbix@findsec123 zabbix < /root/zabbix-4.0.4/database/mysql/schema.sql
mysql -uzabbix -pzabbix@findsec123 zabbix < /root/zabbix-4.0.4/database/mysql/images.sql
mysql -uzabbix -pzabbix@findsec123 zabbix < /root/zabbix-4.0.4/database/mysql/data.sql
修改zabbix server配置
vim /data/findsec/zabbix/etc/zabbix_server.conf
检查DBHost,DBname,DBUser,DBPassword=zabbix@findsec123
增加用户,zabbix的用户默认是禁止登录
groupadd --system zabbix
useradd --system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin -c "Zabbix Monitoring System" zabbix
启动服务
帮助查看:/data/findsec/zabbix/sbin/zabbix_server -h
指定zabbix server的配置文件并启动:/data/findsec/zabbix/sbin/zabbix_server -c /data/findsec/zabbix/etc/zabbix_server.conf
tailf /tmp/zabbix_server.log
增加Zabbix镜像源
rpm -ivh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
安装Zabbix Frontend
yum install zabbix-web-mysql
配置Zabbix frontend
vim /etc/php.ini
max_execution_time = 300
memory_limit = 128M
post_max_size = 16M
upload_max_filesize = 2M
max_input_time = 300
max_input_vars = 10000
always_populate_raw_post_data = -1
date.timezone = Asia/Shanghai
启动httpd
systemctl start httpd.service
systemctl status httpd.service
http://xxx.xxx.xxx.xxx/zabbix/setup.php
Admin
zabbix
安装Zabbix Agent
yum install zabbix-agent
systemctl start zabbix-agent.service
————————————————————————————————————————————————————————————————————————
补充一下如果想要agent源码安装:
上面在 ./configure 已经 --enable-agent
查看zabbix server的日志:tailf /tmp/zabbix_server.log
检查agent.conf配置文件
/data/findsec/zabbix/etc/zabbix_agentd.conf
确认hostname=Zabbix server和日志看到的是一致的,检查Server和ServerActive
启动zabbix agent并指定agent配置文件
/data/findsec/zabbix/sbin/zabbix_agentd -c /data/findsec/zabbix/etc/zabbix_agentd.conf
查看zabbix agent的日志:tailf /tmp/zabbix_agentd.log
ps aux|grep zabbix_agentd
docker 主要是基于linux的容器技术,实现的进程级别的虚拟化,将应用和所依赖的库都封装在容器当中,对应用来说,资源都是独立的并且隔离的,由于容器的可持续部署和隔离性,一般在企业的生产环境都是选择容器,源码包的安装方式居多 或者 定制企业自己的二进制包
#yum install docker-latest
#docker -h 查看帮助
#systemctl start docker-latest
#systemctl status docker-latest
#docker ps
如果没安装会从容器中拉取,然后再安装
安装Apache
把容器的80端口映射到本地的80端口
#docker run -d -p 80:80 httpd
#docker ps
安装mysql
#docker run --name mysql-server -t -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbix@findsec123" -e MYSQL_ROOT_PASSWORD="zabbix@findsec123" -d mysql:5.7 --character-set-server=utf8 --collation-server=utf_bin
安装zabbix-java-gateway
#docker run --name zabbix-java-gateway -t -d zabbix/zabbix-java-gateway:latest
容器之间的通信
安装zabbix-server
#docker run --name zabbix-server-mysql -t -e DB_SERVER_HOST="mysql-server" -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbix@findsec123" -e MYSQL_ROOT_PASSWORD="zabbix@findsec123" -e ZBX_JAVAGATEWAY="zabbix-java-gateway" --link mysqlserver:mysql --link zabbix-java-gateway:zabbix-java-gateway -p 10051:10051 -d zabbix/zabbix-server-mysql:latest
#docker ps
安装前端
#docker run --name zabbix-web-nginx-mysql -t -e DB_SERVER_HOST="mysql-server" -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbix@findsec123" -e MYSQL_ROOT_PASSWORD="zabbix@findsec123" --link mysql-server:mysql --link zabbix-server-mysql:zabbix-server -p 80:80 -d zabbix/zabbix-web-nginx-mysql:latest
安装agent
#docker run --name zabbix-agent -e ZBX_HOSTNAME="Zabbix server" -e ZBX_SERVER_HOST="zabbix-server-mysql" --link zabbix-server-mysql:zabbix-server -d zabbix/zabbix-agent:latest
验证mysql
# docker exec -it mysql-server /bin/bash
root@2da13db7bb0f:/# mysql
root@2da13db7bb0f:/# mysql -uroot -pzabbix@findsed123
zabbix前端是和用户交互的媒介,主要包含了监控数据的查看配置管理监控报表等相关的功能,对于一个监控系统来说,前端页面的功能是否丰富,是否易用,数据展示是否多样等这些因素它都会影响监控系统的使用和普及程度。
修改中文。建立使用英文, 不推荐修改,知道一下这种方法。
Monitoring 监控数据相关信息
Inventory 资产配置(多少监控设备,然后监控设备的一些基本信息)
Reports 报表(包含了一些监控系统的信息、可用性的报告、告警top 100、审计日志)
Report中Action log 产生告警 会触发action操作 都会记录在这
Configuration下Event correlation 事件的关联.用于解决告警风暴,即服务器宕机只会发送宕机报 警,不会发送服务器端口不可用等一系列问题.
Configuration下Service 用来衡量soa
Administration 下面的Queue,用来查看是否有监控项的数据,最近一段时间都没有收到数据
Configuration(包括主机,主机组模板,主机,维护模式,操作,告警事件关联,自动发现功能和服务)
Administration(主要包含了zabbix的一些管理功能,包括了一些proxy的配置、认证方式的配置,用户和用户组,用户的媒介,脚本,队列)
后期会研究研究,准备弄深信服 翔鹰计划,暂时停更哦