一.准备
- 由于安装环境机器角色比较多,下面命令需要在什么情况,什么角色机器上安装说明
1) 例如下面命令需要在zabbix-server上面shell执行 yum install zabbix zabbix-get zabbix-server-mysql zabbix-web-mysql zabbix-web zabbix-agent
文档写为
zabbix-server# yum install zabbix zabbix-get zabbix-server-mysql zabbix-web-mysql zabbix-web zabbix-agent
-
下面命命令需要在zabbix-agent执行. zabbix-agent就是代表所以被监控物理机器,都是zabbix-agent角色机器. zabbix-agent# yum install zabbix zabbix-agent
-
下面的配置只需要在cloudstack management角色机器做命令写为: cloudstack-management# vim /etc/cloudstack/management/log4j-cloud.xml
-
Cloustack management服务监控需要在Cloustack源码对应模块打补丁以后才可以使用 可以参考当前目录下 cloudstack/fix-cs-alarts-bug/ 相关说明.
-
Cloudstack management 模板监控事件说明 参考当前目录下 cloudstack/doc-snmp-alert/
二. zabbix-server 安装
-
添加 zabbix 官方/epel 源安装 zabbix-server# rpm -ivh http://repo.zabbix.com/zabbix/2.4/rhel/7/x86_64/zabbix-release-2.4-1.el7.noarch.rpm
zabbix-server# rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
-
安装zabbix server 由于server 同时需要监控所以这里也一并安装Zabbix-Agent: zabbix-server# yum install zabbix zabbix-get zabbix-server-mysql zabbix-web-mysql zabbix-web zabbix-agent
-
安装mysql 和创建zabbix数据库
-
安装rpm包 zabbix-server# yum install mariadb-server
-
修改配置问题 zabbix-server# vim /etc/my.cnf [mysqld] .... character-set-server=utf8 innodb_file_per_table=1
3)自动启动数据库 zabbix-server# systemctl enable mariadb.service zabbix-server# systemctl start mariadb.service
-
配置mysql默认密码 zabbix-server# mysql_secure_installation
-
创建数据库
zabbix-server# mysql -e "CREATE DATABASE zabbix character set utf8;" -u root -p zabbix-server# mysql -e "GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost' IDENTIFIED BY 'zabbix';" -u root -p zabbix-server# mysql -e 'FLUSH PRIVILEGES;' -u root -p
注意如果字符集不设置为UTF8在浏览器页面可能会乱码.
-
-
导入数据到数据库 zabbix-server# mysql -uzabbix -pzabbix
MariaDB [zabbix]> use zabbix; MariaDB [zabbix]> source /usr/share/doc/zabbix-server-mysql-2.4.7/create/schema.sql
需要注意如果安装zabbix-proxy 只需要导入schema.sql 就可以,无需导入下面的sql,否则zabbix-proxy 无法正常工作.
MariaDB [zabbix]> source /usr/share/doc/zabbix-server-mysql-2.4.7/create/images.sql MariaDB [zabbix]> source /usr/share/doc/zabbix-server-mysql-2.4.7/create/data.sql
-
配置zabbix_server.conf zabbix-server# egrep -v "(^#|^$)" /etc/zabbix/zabbix_server.conf
修改前: LogFile=/var/log/zabbix/zabbix_server.log LogFileSize=0 PidFile=/var/run/zabbix/zabbix_server.pid DBName=zabbix DBUser=zabbix DBSocket=/var/lib/mysql/mysql.sock SNMPTrapperFile=/var/log/snmptt/snmptt.log AlertScriptsPath=/usr/lib/zabbix/alertscripts ExternalScripts=/usr/lib/zabbix/externalscripts
修改后: LogFile=/var/log/zabbix/zabbix_server.log LogFileSize=0 PidFile=/var/run/zabbix/zabbix_server.pid DBHost=localhost #配置mysql 服务hostname DBName=zabbix #配置zabix mysql 数据库实例名字 DBUser=zabbix #配置访问数据库用户明 DBPassword=zabbix #配置访问数据库密码 DBSocket=/var/lib/mysql/mysql.sock StartPollers=5 SNMPTrapperFile=/var/log/snmptt/snmptt.log CacheSize=256M #配置cache 大小 AlertScriptsPath=/usr/lib/zabbix/alertscripts ExternalScripts=/usr/lib/zabbix/externalscripts
-
启动zabbix和http zabbix-server# service zabbix-server start zabbix-server# service httpd start
zabbix-server# systemctl enable zabbix-server.service zabbix-server# systemctl enable httpd.service
-
防火墙配置 zabbix-server# vim /ect/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 10051 -j ACCEPT -A INPUT -m state --state NEW -m tcp -p tcp --dport 10050 -j ACCEPT
1)10050是zabbix-agent端口,zabbix-agent采用被动方式,zabbix-server是主动连接agent的10050端口; 2)10051是zabbix-serve端口, agent采用主动或trapper模式时候回访问server的端口;
重新启动iptable服务: zabbix-server# service iptables restart
-
关闭selinux
- 修改文件 zabbix-server# vim /etc/selinux/config
SELINUX=disabled
2)执行下面命令 zabbix-server# setenforce 0
-
配置php.ini文件 zabbix-server# vim /etc/php.ini
date.timezone = Asia/Shanghai max_execution_time = 300 post_max_size = 16M max_input_time = 300 memory_limit = 128M
-
初始化zabbix-server 1)使用浏览器打开: http://zabbix-server-ip/zabbix/ 点击下一步进入 2) Check of pre-requisites: 如果各个配置都ok可以进入下一步。否则需要修改/etc/php.ini文件,并且重启http服务。
3)Configure DB connection
Database type: MySQL Database host: #set the hostname of mysql Database port: 0 #0 use default port Database name: zabbix Database user: zabbix Database password: #database password in mysql 然后点击Test connection 测试与数据库连接.连接成功,可以点击下一步
-
Zabbix server datails host : localhost port: 10051 name: ***** #配置zabbix-server 名称。
然后点击下一步,进入安装.
-
-
服务器端mysql数据库zabbix历史事件表分区 当有大量历史数据的时候数据数目查询,数据定时清理速度下降,提供zabbix效率建议对历史数据表进行分区.
-
停止zabbix-server zabbix-server# service zabbix-server stop
-
清理数据库 zabbix-server# mysql -uzabbix -pzabbix
mysql>use zabbix; mysql>truncate table history; mysql>optimize table history; mysql>truncate table history_str; mysql>optimize table history_str; mysql>truncate table history_uint; mysql>optimize table history_uint; mysql>truncate table trends; mysql>optimize table trends; mysql>truncate table trends_uint; mysql>optimize table trends_uint; mysql>truncate table events; mysql>optimize table events;
-
使用网上开源zabbix分区脚本 脚本在当前目录下 zabbix/partitiontables.sh. 把此脚本发送到zabbix-server机器上面执行.
-
执行脚本 为了防止执行期间网络中断导致脚本执行失败,使用screen把脚本在后台执行。如果没有screen请自行安装.
zabbix-server# screen -R zabbix zabbix-server# bash partitiontables.sh
按要求输入用户名:zabbix, 密码:zabbix, 选择备份数据库,连续按两次回车键. 当脚本用zabbix用户去连接数据库时候出现拒绝访问的提示,可以忽略直接按回车键即可.
退出screen, 脚本将会在后台执行, 方法如下: 按组合键CRTL+A之后再按组合键CRTL+D
重新进入screen可以查看后台任务 zabbix-server# screen -R zabbix
注意: 严禁在脚本执行期间中断脚本运行,否则可能造成表损坏.
-
关闭housekeeping Adminstration->Ceneral 右上角下拉框选择Housekeeping 把所以项目Enable interal housekeeping 去除
执行脚本以后所有item histroy 都是无效。
三. zabbix-agent 安装
1.zabbix 官方源安装
zabbix-agent# rpm -ivh http://repo.zabbix.com/zabbix/2.4/rhel/7/x86_64/zabbix-release-2.4-1.el7.noarch.rpm
2.epel 源
zabbix-agent# rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
3.安装zabbix-agent
zabbix-agent# yum install zabbix zabbix-agent
例如我们有1000台服务器需要监控,我们必须在1000台机器安装zabbix-agent, 通过zabbix-agent收集服务器性能数据,然后汇报到zabbix-server上。需要配合自动化安装,进行定制化参数配置。
4. 防火墙配置
zabbix-agent# vim /ect/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 10051 -j ACCEPT
-A OUTPUT -m state --state NEW -m tcp -p tcp --dport 10050 -j ACCEPT
1)10050是zabbix-agent端口,zabbix-agent采用被动方式,zabbix-server是主动连接agent的10050端口;
2)10051是zabbix-serve端口, agent采用主动或trapper模式时候回访问server的端口;
重新启动iptable服务:
zabbix-agent# service iptables restart
5. 配置Agent
zabbix-agent# vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.0.240
ServerActive=192.168.0.240
Hostname= #设置名称与下一节你在zabbix-server添加监控host名称一致
AllowRoot=1
User=root
1)被动模式配置:
Server: 被动模式,允许哪台服务器连接Agent。
2) 主动模式配置:
ServerActive: 主动模式,向哪台服务器发送数据。
3)允许多台服务器连接Agent,获取监控数据
server=127.0.0.1,192.168.0.240 表示允许这两台服务器连接Agent
4) 允许主动向多个server 发送监控数据
ServerActive=192.168.0.240:10051
5) 配置zabbix-agent 以root用户运行
AllowRoot=1
User=root
如果不以root用户运行,所有被zabbix-agent执行脚本,访问log文件需要添加zabbix用户执行权限
6. 配置 zabbix-agent开机自动启动
zabbix-agent# systemctl enable zabbix-agent.service
zabbix-agent# systemctl start zabbix-agent.service
五. 安装graphite to zabbix 代理环境 Cloudstack 资源数据, Ceph 监控数据存放在graphite时序数据库里面,zabbix可以通过下面方法获取.
-
安装graphite_to_zabbxi以及相关的包 1)首先自行安装python-pip
2)把当前目录下 ansible/resource/graphite-to-zabbix目拷贝到zabbix-server上
3)安装相关包 zabbix-server# cd graphite-to-zabbix zabbix-server# yum install python-pyzabbix zabbix-sender zabbix-server# pip install ./configparser-3.3.0r2.tar.gz zabbix-server# pip install ./graphite-to-zabbix-0.1.6.tar.gz zabbix-server# pip install ./py-zabbix-0.6.1.tar.gz
-
添加定时任务
定时获取graphite数据发送服务端 zabbix-server# crontab -e
输入: */5 * * * * g2zproxy -z http://zabbix-server-ip/zabbix/ -zu admin -zp zabbix -g http://graphite-web-ip:port
原理: zabbix item 的key 有这种模式模式graphite[......]都会通过g2zproxy从graphite抓取,并且通过zabbix-sender把结果发送zabbix-server。
六. 添加ceph集群监控
-
导入ceph监控模板到zabbix-server ceph监控模块需要用到graphite to zabbix才可以使用,请参考步骤五进行安装. ceph监控数据保存在graphite数据库,通过grafana-web 展示的。详细部署参考我另外项目https://github.com/WingkaiHo/ceph-monitor-dashboard
-
导入ceph集群监控模板 点击configuration(配置)->Templates(模板) 然后group 选择ceph,点击Import 按照要求选择xml文件(ceph模板xml 文件存放在当前目录下 zabbix/zbx_ceph_tmpl.xml) 最后点击Import
-
添加ceph监控集群主机
ceph集群监控模板不能把它引用到普通主机上面,对应一个集群的状态,不是一个主机的状态.
点击configuration(配置)->Host(主机) Group 选择ceph, 然后点击Create键按照下面要求输入: Host name: ceph_cluster (必须填这个名称) Visible name:ceph_cluster (必须填这个名称) Group In groups: ceph Agent interface: 把所有ceph mon ip都加入进去 Monitored by proxy: (no proxy) Enabled true
点击Templates tab link new templates 选择 Template Ceph Cluster and Graphite monnitor 添加下面add
点击最下方的add键
添加成功后就可以对ceph集群进行监控. 注意: 目前一套graphite,zabbix 环境只能监控一个ceph集群.
六. Cloudstack Management 服务监控.
与ceph集群监控不同,一套zabbix环境可以监控多台cloudstack manager机器. 需要在zabbix-server机器安装snmp,snmptrap,配置host map
1.把需要监控cloudstack management机器ip配置到hostmap zabbix-server# vim /etc/hosts (添加机器名, ip对照表) ...
在hosts文件配置hostname和后面添到zabbix被监控机器的hostname必须是一致, 否则snmptt无法使用zabbix-sender发送状态到zabbix-server指定监控cloudstack manager 机器.
2.安装snmp环境 zabbix-server# yum install net-snmp net-snmp-utils
1) 添加MIB文件到snmp服务
把当前目录 cloudstack/CS-ROOT-MIB.txt 拷贝zabbix-server的/usr/share/snmp/mibs/目录, 告诉snmp加载我们mid
zabbix-server# vim /etc/snmp/snmp.conf
mibs +CS-ROOT-MIB
4) 自动启动snmp服务
zabbix-server# systemctl enable snmpd.service
zabbix-server# systemctl start snmpd.service
5) 测试MIB是否配置成功
snmptranslate -On CS-ROOT-MIB::unallocatedVirtualNetworkpublicIp
3.接受cloudstack发送snmptrap消息 cloudstack management通过snmptrap 发送报警信息的,配置snmptrap server后才可以接受到报警.
1) 安装snmptrap(接收报警信息服务)和snmptt(把cloudstack报警信息准化zabbix告警工具)环境
zabbix-server# yum install net-snmp-perl perl-Config-IniFiles.noarch snmptt.noarch perl-sys-Syslog
2)修改snmptrap 启动文件
zabbix-server# vim /usr/lib/systemd/system/snmptrapd.service
修改前:
ExecStart=/usr/sbin/snmptrapd $OPTIONS -f
修改后:
ExecStart=/usr/sbin/snmptrapd $OPTIONS -On -f
修改通过下面命令重新加载启动文件
#systemctl daemon-reload
3) 修改原因是:
I. snmptt是基于数字OID来匹配/etc/snmp/snmptt.conf文件的内容,以确定接收到哪种陷入信息,并且把陷入信息标准化为对应的格式.
II. 但是默认情况snnptrap把事件准化为:SNMPV2-MIB::coldStart,这种简化字符串snmptt无法与snmptt.conf匹配,所以无法识别, 因此需要修改脚本来启动解决.
4)配置snmptrap 把接收命令传到snmptt处理
zabbix-server# vim /etc/snmp/snmptrap.conf
donotfork yes
printeventnumbers yes
traphandle default /usr/sbin/snmptthandler
ignoreauthfailure yes
authCommunity log,execute,net public
5)修改snmptt ini文件
zabbix-server# vim /etc/snmp/snmptt.ini
//修改项目
mode = daemon
date_time_format = %H:%M:%S %Y/%m/%d
log_system_enable = 1
daemon_uid = root
syslog_enable = 0
dns_enable = 1
[TrapFiles]
# A list of snmptt.conf files (this is NOT the snmptrapd.conf file). The COMPLETE path
# and filename. Ex: '/etc/snmp/snmptt.conf'
snmptt_conf_files = <<END
/etc/snmp/snmptt.conf
/etc/snmp/snmptt.conf.CS-ROOT-MIB
END
6)生成cloudstack转换zabbix告警对照表
I. snmptt conf文件可以通过下面命令生成snmpttconvertmib --in=/usr/share/snmp/mibs/CS-ROOT-MIB.txt --out=./snmptt.conf.CS-ROOT-MIB
II. 配置把cloudstack对于告警发送到对应zabiix对应机器选项key值上
III. conf文件已经配置好了。I,II 不需要做,只需把当前目录 cloudstack/CS-ROOT-MIB.txt 拷贝到zabbix-server机器/etc/snmp/, 重新启动
snmp, snmptrap ,snmptt 服务
7) 启动snmptrap
zabbix-server# systemctl enable snmptrapd.service
zabbix-server# systemctl restart snmptrapd.service
8) 启动snmptt
zabbix-server# systemctl enable snmptt.service
zabbix-server# systemctl start snmptt.service
9) 防火墙配置
需要打开snmp, snmptrap端口
zabbix-server# vim /ect/sysconfig/iptables
-A INPUT -m state --state NEW -m udp -p udp --dport 161 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 162 -j ACCEPT
4.Cloudstack Management 服务配置修改 cloudstack-management# vim /etc/cloudstack/management/log4j-cloud.xml
<appender name="SNMP" class="org.apache.cloudstack.alert.snmp.SnmpTrapAppender">
<param name="Threshold" value="WARN"/> <!-- Do not edit. The alert feature assumes WARN. -->
<param name="SnmpManagerIpAddresses" value="10.1.1.1,10.1.1.2"/> <!-- 填入zabbix-server ip地址,可以填多个以','分割>
<param name="SnmpManagerPorts" value="162,162"/> <!-- snmptrap 端口, 默认填入162就可以了>
<param name="SnmpManagerCommunities" value="public,public"/>
<layout class="org.apache.cloudstack.alert.snmp.SnmpEnhancedPatternLayout"> <!-- Do not edit -->
<param name="PairDelimeter" value="//"/>
<param name="KeyValueDelimeter" value="::"/>
</layout>
</appender>
修改以后:
cloudstack-management# service cloudstack-management restart
5.zabbix页面添加cloudstack management 模板
-
导入cloudstack management监控模板 点击configuration(配置)->Templates(模板)->Import 按照要求选择xml文件(cloudstack management模板xml文件存放在当前目录下 cloudstack/zbx_cs_templates.xml) 最后点击Import
完成以后就成功添加cloudstack management
6.添加cloudstack management设备
zabbix 监控以主机为单位,cloudstack management服务运行在一台主机上,监控cloudstack management状态先添加cloudstack management运行主机然后,主机temple 选择cloudstack management监控模板,就可以得到这台机器运行cloudstack management服务的报服务息. 一台机器可以连接多个模板.
点击configuration(配置)->Host(主机) Group 选择Cloudstack Management, 然后点击Create键按照下面要求输入:
Host name: (必须填这个名称/etc/hosts ip map 对应名称一样)
Visible name:
Group In groups: Cloudstack Management
Agent interface: (必须填这个名称/etc/hosts ip map hostname对于ip)
Monitored by proxy: (no proxy)
Enabled true
点击Templates tab link new templates 选择 Template CloudStack Management 添加下面add
再点击最下方的add键
重复上面的步骤添加多台的机器上cloudstack management服务状态进行监控。
七. 自动注册 自动注册: 当zabbix-agent启动,并且连接上zabbix-server时候, 通过zabbix-server用户定义action注册主机设备。自动搜索发现:zabbix主动通过ping等方式添加主机,自动注册主动的(active) 比自动发现消耗zabbix-server更低的资源,但是只能用于有安装zabbix-agent才可以使用,其他监控方式都不行。
以添加dell 服务器为例子进行说明,dell服务安装linux系统,服务器内置有Dell监控系统idrac, 其中一台服务器ip地址192.168.20.7, idrac网段使用192.168.230.0, idrac ip最后1位与服务linux ip最后一位是相同的。
1. zabbix-agent 上面的配置
zabbix-agent# vim /etc/zabbix/zabbix-agentd.conf
ListenIP : #此处填写Agent监听IP地址
ListenPort: #此处填写Agent监听端口
HostMetadata=DELL LINUX
Hostname= #此处填写机器名字, 如果不向填入具体hostname 可以选择打开HostnameItem=system.hostname
2. zabbix-server 页面上
configuration->Actions, 右侧Event source下拉框选择 “Auto registration”, 然后点击Create action
下面两个action必须按照先后添加
1)添加linux主机注册
Tab action
Name: Linux Server Auto Registration
Default subject: Auto registration: {HOST.HOST}
Default message:
Host name: {HOST.HOST}
Host IP: {HOST.IP}
Agent port: {HOST.PORT}
Tab conditions
New condition: Host metadata like LINUX
Tab operation:
Add host
Link to templates: Template OS Linux
然后点击add 添加
2)添加dell idrac监控
Tab action
Name Dell IDRAC Snmp Interface Atuo Registration
Default subject: Auto registration: {HOST.HOST}
Default message:
Host name: {HOST.HOST}
Host IP: {HOST.IP}
Agent port: {HOST.PORT}
Tab conditions
New condition: Host metadata like LINUX 添加完后点击add
Tab operation:
Link to templates: Template_Dell_IDRAC
添加Run Remote command
Target list : current host
Type: custom script
Execute on: zabbix server
/usr/bin/zabbix-add-interface -host={HOST.HOST} -agent_ip={HOST.IP} -net_section=192.168.230.0 -user=admin -password=zabbix
zabbix-add-interface 工具以及代码在zabbix dell-idrac目录
-net_section= #填写idrac网段
-user= #zabbix 登录用户名
-password= #zabbix 密码
其他选项不用修改
填写完毕以后点击Add, 然后点击右下方Add