Flowcharting是Grafana的社区插件,可以展示zabbix主机拓扑,如果zabbix主机出现故障,flowcharting要设置每个主机的规则(rule),达到触发条件后,flowcharting对应主机会显示告警提示:
如果使用默认方法,需要添加多个规则来应对主机的告警提示,如:
添加规则:A主机的CPU利用率超90%;
添加规则:A主机的内存利用率超95%;
添加规则:A主机的/目录占用率超90%;
……
这只是一个主机添加规则,如果N台主机呢?如果发生未知故障呢?
对比zabbix原生拓扑图,只要被监控主机发生了problem,在对应的主机图标就会有警告提醒。
如何改造,让Flowcharting也能达到原生zabbix拓扑的效果呢?
新建视图(mysql)
视图脚本:
CREATE
VIEW `zabbix`.`v_problem`
AS
(SELECT
f.triggerid,
i.hostid,
h.name,
p.severity,
t.priority
FROM
problem p,
functions f,
items i,
triggers t,
hosts h
WHERE f.triggerid = p.objectid
AND f.itemid = i.itemid
AND i.hostid=h.hostid
AND f.triggerid=t.triggerid
#and t.status=0
AND t.value<>0
AND p.clock > UNIX_TIMESTAMP() - 86400);
p.clock > UNIX_TIMESTAMP() – 86400:表示取24小时内的警告信息,这个条件可以按需设定。
字段状态说明:
status-0 表示Trigger is active 1表示Trigger is disabled
value -0表示OK 1表示PROBLEM 2表示UNKNOWN
priority -0表示Not classified 1表示 Information 2表示Warning 3表示Average 4表示High 5表示Disaster
部署ODBC
Mysql (on linux7)
- yum安装
[root@localhost ~]# yum -y install unixODBC unixODBC-devel
- 查看ODBC配置
[root@localhost ~]# odbcinst -j
unixODBC 2.3.1
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
[root@localhost ~]#
- 查看ODBC驱动配置
[root@localhost ~]# cat /etc/odbcinst.ini
[PostgreSQL]
Description = ODBC for PostgreSQL
Driver = /usr/lib/psqlodbcw.so
Setup = /usr/lib/libodbcpsqlS.so
Driver64 = /usr/lib64/psqlodbcw.so
Setup64 = /usr/lib64/libodbcpsqlS.so
FileUsage = 1
[MySQL]
Description = ODBC for MySQL
Driver = /usr/lib/libmyodbc5a.so
Setup = /usr/lib/libodbcmyS.so
Driver64 = /usr/lib64/libmyodbc5a.so
Setup64 = /usr/lib64/libodbcmyS.so
FileUsage = 1
安装最新版的mysql-connector-odbc-5.3.12-1.el7.x86_64.rpm后, 需要在配置文件中把libmyodbc5.so改为libmyodbc5a.so.不然会报如下错:
[root@localhost ~]#[root@localhost ~]# isql -v mysql_127_0_0_1
[01000][unixODBC][Driver Manager]Can't open lib '/usr/lib64/libmyodbc5.so' : file not found
[ISQL]ERROR: Could not SQLConnect
- 安装MYSQL ODBC驱动(存在版本不兼容问题,要从网上下载最新的安装包)
[root@localhost ~]# yum localinstall mysql-connector-odbc-5.3.12-1.el7.x86_64.rpm -y
[root@localhost ~]# cat /etc/odbc.ini
[mysql_127_0_0_1]
Description = MySQL test database
Driver = MySQL
Server = 127.0.0.1
User = zabbix
Password = 123456
Port = 3306
Database = zabbix
[root@localhost ~]#
[root@localhost ~]# isql mysql_127_0_0_1
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
MariaDB(on linux8)
MariaDB与mysql使用不同的odbc驱动,从官网下载对应版本的mariadb-connector-odbc-3.1.15-centos8-amd64.tar,解压后找到对应的so文件,copy到对应的位置.
[root@localhost ~]# cat /etc/odbcinst.ini
[MySQL]
Description=ODBC for MySQL
Driver=/usr/lib/libmyodbc5.so
Setup=/usr/lib/libodbcmyS.so
Driver64=/usr/lib64/libmyodbc5.so
Setup64=/usr/lib64/libodbcmyS.so
FileUsage=1
[MariaDB]
Description=ODBC for MariaDB
Driver=/usr/lib/libmaodbc.so
Driver64=/usr/lib64/libmaodbc.so
FileUsage=1
[root@localhost ~]# cp mariadb-connector-odbc-3.1.15-centos8-amd64/lib64/mariadb/libmaodbc.so /usr/lib64/libmaodbc.so
[root@localhost mariadb]# cat /etc/odbc.ini
[mysql_127_0_0_1]
Description = MySQL test database
Driver = MariaDB
Server = 127.0.0.1
User = zabbix
Password = zabbix123456
Port = 3306
Database = zabbix
[root@localhost ~]# isql mysql_127_0_0_1
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
Zabbix添加监控项
对应不同的主机,需要将SQL改为 where name=”hostname”;如果需要更详细的告警级别信息,参考priority 字段:
- 0表示Not classified
- 1表示 Information
- 2表示Warning
- 3表示Average
- 4表示High
- 5表示Disaster
对where条件进行扩展。
Flowcharting设置监控项
至此,flowcharting改造完成,只要对应的主机出现一条以上的problem数据,flowcharting拓扑图就会出现告警提醒。
目前,只实现了基本功能,还有待完善的地方,比如:添加zabbix监控项时,如何更高效地使用主机宏变量等,期望大家拍砖!
附:部署drawio
安装openjdk
- #查找jdk版本
yum list | grep jdk
- #安装openjdk
yum install java-1.8.0-openjdk.x86_64
- #查看版本
java -version
安装openjdk开发环境
- #安装openjdk-devel
yum install java-1.8.0-openjdk-devel
- #查看版本
[root@localhost ~]# javac -version
javac 1.8.0_312
- 修改配置文件
vim /etc/profile
#你自己的jdk目录 此处要仔细查找一下,确认目录位置(rpm -ql)
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-1.el8_4.x86_64
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
安装drawio网页版
- 下载 此文件大约1G,要较长时间
git clone https://github.com/jgraph/drawio.git
- 打war包,便于部署
cd etc/build && ant war
如果缺少ant包,会提示yum安装 ant
- 部署tomcat
上传Tomcat9.0 至 /usr/local/tomcat(在local下创建tomcat文件夹)
cd 进入/usr/local/tomcat 目录下执行命令 tar -xzvf apache-tomcat-9.0.39.tar.gz
进入/usr/local/tomcat/ apache-tomcat-9.0.39/bin 目录下 执行命令 ./startup.sh
tomcat一般用户会部署多个以对应多个应用(端口不同),开机或重启后,要执行下面命令:
./usr/local/tomcat/apache-tomcat-9.0.63/bin/startup.sh
- 验证tomcat安装
- 部署网页版drawio
[root@localhost build]# pwd
/root/drawio/build
[root@localhost build]# cp -rp ./draw.war /usr/local/tomcat/apache-tomcat-9.0.63/webapps/
- 验证
http://localhost:8080/draw/
设置tomcat开机自启动
- [root@localhost ~]# vim /usr/local/tomcat/apache-tomcat-9.0.63/bin/catalina.sh
在此行PRGDIR=`dirname "$PRG"` 后,增加一行:
CATALINA_PID="/usr/local/tomcat/apache-tomcat-9.0.63/bin/tomcat.pid"
- [root@localhost ~]# vim /usr/lib/systemd/system/tomcat.service
[Unit]
Description=tomcat-server
After=network.target
[Service]
Type=forking
#因为服务启动时,是不会读取全局变量的(/etc/profile),因此全局变量中配置的属性是读取不到的需要注意。所以需要在这里配置Tomcat 启动需要的JDK,指定JDK路径
Environment="JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-1.el8_4.x86_64"
# 此文件是在第一步时配置的,如果type是后台运行,建议将此属性加上,指定pid。
PIDFile=/usr/local/tomcat/apache-tomcat-9.0.63/bin/tomcat.pid
# 需要注意的就是下面这一行,如果路径错了,那就无法自动启动,下面会有图文解释
# /bin/后面跟的是你之前手动启动服务的命令以及启动所携带的配置文件,如果没有则不需要
# 整个 ExecStart 脚本,相当于是让系统开机时自动帮你在终端输入等号后面的命令
ExecStart=/usr/local/tomcat/apache-tomcat-9.0.63/bin/startup.sh
ExecReload=/usr/local/tomcat/apache-tomcat-9.0.63/bin/shutdown.sh
ExecReload=/bin/kill -s HUP $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[Unit]:服务的说明
Description:描述服务
After:描述服务类别
[Service]服务运行参数的设置
Type=forking是后台运行的形式
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:[Service]的启动、重启、停止命令全部要求使用绝对路径
[Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3
去掉注释后的tomcat.service文件:
[root@localhost ~]# cat /usr/lib/systemd/system/tomcat.service
[Unit]
Description=tomcat-server
After=network.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-1.el8_4.x86_64"
PIDFile=/usr/local/tomcat/apache-tomcat-9.0.63/bin/tomcat.pid
ExecStart=/usr/local/tomcat/apache-tomcat-9.0.63/bin/startup.sh
ExecReload=/usr/local/tomcat/apache-tomcat-9.0.63/bin/shutdown.sh
ExecReload=/bin/kill -s HUP $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[root@localhost ~]#
- 加入开机自启动
# systemctl enable tomcat.service
如何取消开机自启动
# systemctl disable tomcat.service
- 服务的启动/停止/刷新配置文件/查看状态
启动tomcat: systemctl start tomcat
停止tomcat: systemctl stop tomcat
重启tomcat: systemctl restart tomcat
修改tomcat.service文件后使其生效:systemctl daemon-relo