Flowcharting是Grafana的社区插件,可以展示zabbix主机拓扑,如果zabbix主机出现故障,flowcharting要设置每个主机的规则(rule),达到触发条件后,flowcharting对应主机会显示告警提示:

zabbix拓扑图长期显示故障线路 zabbix拓扑图动态展示_运维

如果使用默认方法,需要添加多个规则来应对主机的告警提示,如:

添加规则:A主机的CPU利用率超90%;

添加规则:A主机的内存利用率超95%;

添加规则:A主机的/目录占用率超90%;

……

这只是一个主机添加规则,如果N台主机呢?如果发生未知故障呢?

对比zabbix原生拓扑图,只要被监控主机发生了problem,在对应的主机图标就会有警告提醒。

zabbix拓扑图长期显示故障线路 zabbix拓扑图动态展示_tomcat_02

   如何改造,让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)

  1. yum安装

[root@localhost ~]# yum -y install unixODBC unixODBC-devel

  1. 查看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 ~]#

  1. 查看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

  1. 安装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添加监控项

zabbix拓扑图长期显示故障线路 zabbix拓扑图动态展示_bc_03

对应不同的主机,需要将SQL改为 where name=”hostname”;如果需要更详细的告警级别信息,参考priority 字段:

  1. 0表示Not classified
  2. 1表示 Information
  3. 2表示Warning
  4. 3表示Average
  5. 4表示High
  6. 5表示Disaster

对where条件进行扩展。

Flowcharting设置监控项

zabbix拓扑图长期显示故障线路 zabbix拓扑图动态展示_运维_04

    至此,flowcharting改造完成,只要对应的主机出现一条以上的problem数据,flowcharting拓扑图就会出现告警提醒。

   

    目前,只实现了基本功能,还有待完善的地方,比如:添加zabbix监控项时,如何更高效地使用主机宏变量等,期望大家拍砖!

附:部署drawio

安装openjdk

  1. #查找jdk版本

 yum list | grep jdk

  1. #安装openjdk

yum install java-1.8.0-openjdk.x86_64

  1. #查看版本

java -version

安装openjdk开发环境

  1. #安装openjdk-devel

yum install java-1.8.0-openjdk-devel

  1. #查看版本

[root@localhost ~]# javac -version

javac 1.8.0_312

  1. 修改配置文件

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网页版

  1. 下载 此文件大约1G,要较长时间

git clone https://github.com/jgraph/drawio.git

  1. 打war包,便于部署

cd etc/build && ant war

如果缺少ant包,会提示yum安装 ant

  1. 部署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

  1. 验证tomcat安装

zabbix拓扑图长期显示故障线路 zabbix拓扑图动态展示_zabbix拓扑图长期显示故障线路_05

  1. 部署网页版drawio

[root@localhost build]# pwd

/root/drawio/build

[root@localhost build]# cp -rp ./draw.war /usr/local/tomcat/apache-tomcat-9.0.63/webapps/

  1. 验证

http://localhost:8080/draw/

zabbix拓扑图长期显示故障线路 zabbix拓扑图动态展示_zabbix拓扑图长期显示故障线路_06

设置tomcat开机自启动

  1. [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"

  1. [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 ~]#

  1. 加入开机自启动

# systemctl enable tomcat.service

如何取消开机自启动

# systemctl disable tomcat.service

  1. 服务的启动/停止/刷新配置文件/查看状态

    启动tomcat: systemctl start tomcat

    停止tomcat:  systemctl stop tomcat

    重启tomcat:  systemctl restart tomcat

    修改tomcat.service文件后使其生效:systemctl daemon-relo