Build plugin with grafana toolkit (#1539)
* Use grafana toolkit template for building plugin * Fix linter and type errors * Update styles building * Fix sass deprecation warning * Remove empty js files produced by webpack building sass * Fix signing script * Replace classnames with cx * Fix data source config page * Use custom webpack config instead of overriding original one * Use gpx_ prefix for plugin executable * Remove unused configs * Roll back react hooks dependencies usage * Move plugin-specific ts config to root config file * Temporary do not use rst2html for function description tooltip * Remove unused code * remove unused dependencies * update react table dependency * Migrate tests to typescript * remove unused dependencies * Remove old webpack configs * Add sign target to makefile * Add magefile * Update CI test job * Update go packages * Update build instructions * Downgrade go version to 1.18 * Fix go version in ci * Fix metric picker * Add comment to webpack config * remove angular mocks * update bra config * Rename datasource-zabbix to datasource (fix mage build) * Add instructions for building backend with mage * Fix webpack targets * Fix ci backend tests * Add initial e2e tests * Fix e2e ci tests * Update docker compose for cypress tests * build grafana docker image * Fix docker stop task * CI: add Grafana compatibility check
This commit is contained in:
17
devenv/default/bootstrap/Dockerfile
Normal file
17
devenv/default/bootstrap/Dockerfile
Normal file
@@ -0,0 +1,17 @@
|
||||
FROM python:2.7
|
||||
|
||||
ENV ZBX_API_URL=http://zabbix-web:8080
|
||||
ENV ZBX_API_USER="Admin"
|
||||
ENV ZBX_API_PASSWORD="zabbix"
|
||||
ENV ZBX_CONFIG="zbx_export_hosts.xml"
|
||||
ENV ZBX_BOOTSTRAP_SCRIPT="bootstrap_config.py"
|
||||
|
||||
RUN pip install pyzabbix
|
||||
|
||||
ADD ./bootstrap_config.py /bootstrap_config.py
|
||||
ADD ${ZBX_CONFIG} /${ZBX_CONFIG}
|
||||
|
||||
WORKDIR /
|
||||
|
||||
# Run bootstrap_config.py when the container launches
|
||||
CMD ["python", "/bootstrap_config.py"]
|
||||
80
devenv/default/bootstrap/bootstrap_config.py
Normal file
80
devenv/default/bootstrap/bootstrap_config.py
Normal file
@@ -0,0 +1,80 @@
|
||||
import os
|
||||
from time import sleep
|
||||
from pyzabbix import ZabbixAPI, ZabbixAPIException
|
||||
|
||||
zabbix_url = os.environ['ZBX_API_URL']
|
||||
zabbix_user = os.environ['ZBX_API_USER']
|
||||
zabbix_password = os.environ['ZBX_API_PASSWORD']
|
||||
print(zabbix_url, zabbix_user, zabbix_password)
|
||||
|
||||
zapi = ZabbixAPI(zabbix_url, timeout=5)
|
||||
|
||||
for i in range(10):
|
||||
print("Trying to connected to Zabbix API %s" % zabbix_url)
|
||||
try:
|
||||
zapi.login(zabbix_user, zabbix_password)
|
||||
print("Connected to Zabbix API Version %s" % zapi.api_version())
|
||||
break
|
||||
except ZabbixAPIException as e:
|
||||
print e
|
||||
sleep(5)
|
||||
except:
|
||||
print("Waiting")
|
||||
sleep(5)
|
||||
|
||||
|
||||
config_path = os.environ['ZBX_CONFIG']
|
||||
import_rules = {
|
||||
'discoveryRules': {
|
||||
'createMissing': True,
|
||||
'updateExisting': True
|
||||
},
|
||||
'graphs': {
|
||||
'createMissing': True,
|
||||
'updateExisting': True
|
||||
},
|
||||
'groups': {
|
||||
'createMissing': True
|
||||
},
|
||||
'hosts': {
|
||||
'createMissing': True,
|
||||
'updateExisting': True
|
||||
},
|
||||
'images': {
|
||||
'createMissing': True,
|
||||
'updateExisting': True
|
||||
},
|
||||
'items': {
|
||||
'createMissing': True,
|
||||
'updateExisting': True
|
||||
},
|
||||
'maps': {
|
||||
'createMissing': True,
|
||||
'updateExisting': True
|
||||
},
|
||||
'templateLinkage': {
|
||||
'createMissing': True,
|
||||
},
|
||||
'templates': {
|
||||
'createMissing': True,
|
||||
'updateExisting': True
|
||||
},
|
||||
'triggers': {
|
||||
'createMissing': True,
|
||||
'updateExisting': True
|
||||
},
|
||||
}
|
||||
|
||||
print("Importing Zabbix config from %s" % config_path)
|
||||
with open(config_path, 'r') as f:
|
||||
config = f.read()
|
||||
|
||||
try:
|
||||
# https://github.com/lukecyca/pyzabbix/issues/62
|
||||
import_result = zapi.confimport("xml", config, import_rules)
|
||||
print(import_result)
|
||||
except ZabbixAPIException as e:
|
||||
print e
|
||||
|
||||
for h in zapi.host.get(output="extend"):
|
||||
print(h['name'])
|
||||
432
devenv/default/bootstrap/zbx_export_hosts.xml
Normal file
432
devenv/default/bootstrap/zbx_export_hosts.xml
Normal file
@@ -0,0 +1,432 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<zabbix_export>
|
||||
<version>6.0</version>
|
||||
<date>2022-04-28T13:04:18Z</date>
|
||||
<groups>
|
||||
<group>
|
||||
<uuid>2e427c268ac1468b9add94b65e2d6c14</uuid>
|
||||
<name>Backend</name>
|
||||
</group>
|
||||
<group>
|
||||
<uuid>d97ba66b283544339628b71975a6e68d</uuid>
|
||||
<name>Frontend</name>
|
||||
</group>
|
||||
<group>
|
||||
<uuid>dc579cd7a1a34222933f24f52a68bcd8</uuid>
|
||||
<name>Linux servers</name>
|
||||
</group>
|
||||
<group>
|
||||
<uuid>6f6799aa69e844b4b3918f779f2abf08</uuid>
|
||||
<name>Zabbix servers</name>
|
||||
</group>
|
||||
<group>
|
||||
<uuid>7df96b18c230490a9a0a9e2307226338</uuid>
|
||||
<name>Templates</name>
|
||||
</group>
|
||||
</groups>
|
||||
<hosts>
|
||||
<host>
|
||||
<host>backend01</host>
|
||||
<name>backend01</name>
|
||||
<templates>
|
||||
<template>
|
||||
<name>Template ZAS Agent</name>
|
||||
</template>
|
||||
</templates>
|
||||
<groups>
|
||||
<group>
|
||||
<name>Backend</name>
|
||||
</group>
|
||||
<group>
|
||||
<name>Linux servers</name>
|
||||
</group>
|
||||
</groups>
|
||||
<interfaces>
|
||||
<interface>
|
||||
<useip>NO</useip>
|
||||
<dns>zas_backend_01</dns>
|
||||
<interface_ref>if1</interface_ref>
|
||||
</interface>
|
||||
</interfaces>
|
||||
<tags>
|
||||
<tag>
|
||||
<tag>backend</tag>
|
||||
</tag>
|
||||
<tag>
|
||||
<tag>service</tag>
|
||||
<value>backend</value>
|
||||
</tag>
|
||||
</tags>
|
||||
<inventory_mode>DISABLED</inventory_mode>
|
||||
</host>
|
||||
<host>
|
||||
<host>backend02</host>
|
||||
<name>backend02</name>
|
||||
<templates>
|
||||
<template>
|
||||
<name>Template ZAS Agent</name>
|
||||
</template>
|
||||
</templates>
|
||||
<groups>
|
||||
<group>
|
||||
<name>Backend</name>
|
||||
</group>
|
||||
<group>
|
||||
<name>Linux servers</name>
|
||||
</group>
|
||||
</groups>
|
||||
<interfaces>
|
||||
<interface>
|
||||
<useip>NO</useip>
|
||||
<dns>zas_backend_02</dns>
|
||||
<interface_ref>if1</interface_ref>
|
||||
</interface>
|
||||
</interfaces>
|
||||
<tags>
|
||||
<tag>
|
||||
<tag>backend</tag>
|
||||
</tag>
|
||||
<tag>
|
||||
<tag>service</tag>
|
||||
<value>backend</value>
|
||||
</tag>
|
||||
</tags>
|
||||
<inventory_mode>DISABLED</inventory_mode>
|
||||
</host>
|
||||
<host>
|
||||
<host>frontend01</host>
|
||||
<name>frontend01</name>
|
||||
<templates>
|
||||
<template>
|
||||
<name>Template ZAS Agent</name>
|
||||
</template>
|
||||
</templates>
|
||||
<groups>
|
||||
<group>
|
||||
<name>Frontend</name>
|
||||
</group>
|
||||
<group>
|
||||
<name>Linux servers</name>
|
||||
</group>
|
||||
</groups>
|
||||
<interfaces>
|
||||
<interface>
|
||||
<useip>NO</useip>
|
||||
<dns>zas_frontend_01</dns>
|
||||
<interface_ref>if1</interface_ref>
|
||||
</interface>
|
||||
</interfaces>
|
||||
<tags>
|
||||
<tag>
|
||||
<tag>frontend</tag>
|
||||
</tag>
|
||||
<tag>
|
||||
<tag>service</tag>
|
||||
<value>frontend</value>
|
||||
</tag>
|
||||
</tags>
|
||||
<inventory_mode>DISABLED</inventory_mode>
|
||||
</host>
|
||||
<host>
|
||||
<host>frontend02</host>
|
||||
<name>frontend02</name>
|
||||
<templates>
|
||||
<template>
|
||||
<name>Template ZAS Agent</name>
|
||||
</template>
|
||||
</templates>
|
||||
<groups>
|
||||
<group>
|
||||
<name>Frontend</name>
|
||||
</group>
|
||||
<group>
|
||||
<name>Linux servers</name>
|
||||
</group>
|
||||
</groups>
|
||||
<interfaces>
|
||||
<interface>
|
||||
<useip>NO</useip>
|
||||
<dns>zas_frontend_02</dns>
|
||||
<interface_ref>if1</interface_ref>
|
||||
</interface>
|
||||
</interfaces>
|
||||
<tags>
|
||||
<tag>
|
||||
<tag>frontend</tag>
|
||||
</tag>
|
||||
<tag>
|
||||
<tag>service</tag>
|
||||
<value>frontend</value>
|
||||
</tag>
|
||||
</tags>
|
||||
<inventory_mode>DISABLED</inventory_mode>
|
||||
</host>
|
||||
<host>
|
||||
<host>Zabbix server</host>
|
||||
<name>Zabbix server</name>
|
||||
<templates>
|
||||
<template>
|
||||
<name>Linux by Zabbix agent</name>
|
||||
</template>
|
||||
<template>
|
||||
<name>Zabbix server health</name>
|
||||
</template>
|
||||
</templates>
|
||||
<groups>
|
||||
<group>
|
||||
<name>Zabbix servers</name>
|
||||
</group>
|
||||
</groups>
|
||||
<interfaces>
|
||||
<interface>
|
||||
<useip>NO</useip>
|
||||
<dns>zabbix-agent</dns>
|
||||
<interface_ref>if1</interface_ref>
|
||||
</interface>
|
||||
</interfaces>
|
||||
<inventory_mode>DISABLED</inventory_mode>
|
||||
</host>
|
||||
</hosts>
|
||||
<templates>
|
||||
<template>
|
||||
<uuid>2d7a65bb369c48199361913b223b1695</uuid>
|
||||
<template>Template ZAS Agent</template>
|
||||
<name>Template ZAS Agent</name>
|
||||
<templates>
|
||||
<template>
|
||||
<name>Zabbix agent</name>
|
||||
</template>
|
||||
</templates>
|
||||
<groups>
|
||||
<group>
|
||||
<name>Templates</name>
|
||||
</group>
|
||||
</groups>
|
||||
<items>
|
||||
<item>
|
||||
<uuid>e79d4215ec014b74923b905bb8f82410</uuid>
|
||||
<name>Incoming network traffic on eth0</name>
|
||||
<key>net.if.in[eth0]</key>
|
||||
<history>1d</history>
|
||||
<units>bps</units>
|
||||
<request_method>POST</request_method>
|
||||
<tags>
|
||||
<tag>
|
||||
<tag>Application</tag>
|
||||
<value>Network interfaces</value>
|
||||
</tag>
|
||||
</tags>
|
||||
</item>
|
||||
<item>
|
||||
<uuid>18b377dae9fe48d093c16ee7a7c93320</uuid>
|
||||
<name>Outgoing network traffic on eth0</name>
|
||||
<key>net.if.out[eth0]</key>
|
||||
<history>1d</history>
|
||||
<units>bps</units>
|
||||
<request_method>POST</request_method>
|
||||
<tags>
|
||||
<tag>
|
||||
<tag>Application</tag>
|
||||
<value>Network interfaces</value>
|
||||
</tag>
|
||||
</tags>
|
||||
</item>
|
||||
<item>
|
||||
<uuid>2479e055e91c476f9be93b5f363cfa2f</uuid>
|
||||
<name>Processor load (1 min average per core)</name>
|
||||
<key>system.cpu.load[percpu,avg1]</key>
|
||||
<history>1d</history>
|
||||
<value_type>FLOAT</value_type>
|
||||
<description>The processor load is calculated as system CPU load divided by number of CPU cores.</description>
|
||||
<request_method>POST</request_method>
|
||||
<tags>
|
||||
<tag>
|
||||
<tag>Application</tag>
|
||||
<value>CPU</value>
|
||||
</tag>
|
||||
<tag>
|
||||
<tag>Application</tag>
|
||||
<value>Performance</value>
|
||||
</tag>
|
||||
</tags>
|
||||
<triggers>
|
||||
<trigger>
|
||||
<uuid>60e5484b60ca4061b21bd23f8364bd6e</uuid>
|
||||
<expression>last(/Template ZAS Agent/system.cpu.load[percpu,avg1])>2</expression>
|
||||
<name>Processor load is too high on {HOST.NAME}</name>
|
||||
<priority>WARNING</priority>
|
||||
<tags>
|
||||
<tag>
|
||||
<tag>app</tag>
|
||||
<value>performance</value>
|
||||
</tag>
|
||||
<tag>
|
||||
<tag>type</tag>
|
||||
<value>cpu</value>
|
||||
</tag>
|
||||
</tags>
|
||||
</trigger>
|
||||
</triggers>
|
||||
</item>
|
||||
<item>
|
||||
<uuid>f0dd4221793c49889cf2789806afa597</uuid>
|
||||
<name>Processor load (15 min average per core)</name>
|
||||
<key>system.cpu.load[percpu,avg15]</key>
|
||||
<history>1d</history>
|
||||
<value_type>FLOAT</value_type>
|
||||
<description>The processor load is calculated as system CPU load divided by number of CPU cores.</description>
|
||||
<request_method>POST</request_method>
|
||||
<tags>
|
||||
<tag>
|
||||
<tag>Application</tag>
|
||||
<value>CPU</value>
|
||||
</tag>
|
||||
<tag>
|
||||
<tag>Application</tag>
|
||||
<value>Performance</value>
|
||||
</tag>
|
||||
</tags>
|
||||
</item>
|
||||
<item>
|
||||
<uuid>9a8b4a1f173b4f209723d820dc2e054a</uuid>
|
||||
<name>CPU $2 time</name>
|
||||
<key>system.cpu.util[,iowait]</key>
|
||||
<history>1d</history>
|
||||
<value_type>FLOAT</value_type>
|
||||
<units>%</units>
|
||||
<description>Amount of time the CPU has been waiting for I/O to complete.</description>
|
||||
<request_method>POST</request_method>
|
||||
<tags>
|
||||
<tag>
|
||||
<tag>Application</tag>
|
||||
<value>CPU</value>
|
||||
</tag>
|
||||
<tag>
|
||||
<tag>Application</tag>
|
||||
<value>Performance</value>
|
||||
</tag>
|
||||
</tags>
|
||||
<triggers>
|
||||
<trigger>
|
||||
<uuid>ceb468b9eb434fa6bd4c8a5d7507fd87</uuid>
|
||||
<expression>avg(/Template ZAS Agent/system.cpu.util[,iowait],5m)>20</expression>
|
||||
<name>Disk I/O is overloaded on {HOST.NAME}</name>
|
||||
<priority>WARNING</priority>
|
||||
<description>OS spends significant time waiting for I/O (input/output) operations. It could be indicator of performance issues with storage system.</description>
|
||||
<tags>
|
||||
<tag>
|
||||
<tag>disk</tag>
|
||||
</tag>
|
||||
<tag>
|
||||
<tag>type</tag>
|
||||
<value>disk</value>
|
||||
</tag>
|
||||
</tags>
|
||||
</trigger>
|
||||
</triggers>
|
||||
</item>
|
||||
<item>
|
||||
<uuid>e6d19d47cf60452ead1e791da2d5c0dc</uuid>
|
||||
<name>CPU $2 time</name>
|
||||
<key>system.cpu.util[,system]</key>
|
||||
<history>1d</history>
|
||||
<value_type>FLOAT</value_type>
|
||||
<units>%</units>
|
||||
<description>The time the CPU has spent running the kernel and its processes.</description>
|
||||
<request_method>POST</request_method>
|
||||
<tags>
|
||||
<tag>
|
||||
<tag>Application</tag>
|
||||
<value>CPU</value>
|
||||
</tag>
|
||||
<tag>
|
||||
<tag>Application</tag>
|
||||
<value>Performance</value>
|
||||
</tag>
|
||||
</tags>
|
||||
</item>
|
||||
<item>
|
||||
<uuid>2d81fbc139774306959712a627c99b9a</uuid>
|
||||
<name>CPU $2 time</name>
|
||||
<key>system.cpu.util[,user]</key>
|
||||
<history>1d</history>
|
||||
<value_type>FLOAT</value_type>
|
||||
<units>%</units>
|
||||
<description>The time the CPU has spent running users' processes that are not niced.</description>
|
||||
<request_method>POST</request_method>
|
||||
<tags>
|
||||
<tag>
|
||||
<tag>Application</tag>
|
||||
<value>CPU</value>
|
||||
</tag>
|
||||
<tag>
|
||||
<tag>Application</tag>
|
||||
<value>Performance</value>
|
||||
</tag>
|
||||
</tags>
|
||||
</item>
|
||||
</items>
|
||||
</template>
|
||||
</templates>
|
||||
<graphs>
|
||||
<graph>
|
||||
<uuid>7aac0ec0c0e04b7a8bb6472d1faa7a09</uuid>
|
||||
<name>CPU load</name>
|
||||
<ymin_type_1>FIXED</ymin_type_1>
|
||||
<graph_items>
|
||||
<graph_item>
|
||||
<color>009900</color>
|
||||
<item>
|
||||
<host>Template ZAS Agent</host>
|
||||
<key>system.cpu.load[percpu,avg1]</key>
|
||||
</item>
|
||||
</graph_item>
|
||||
<graph_item>
|
||||
<sortorder>2</sortorder>
|
||||
<color>990000</color>
|
||||
<item>
|
||||
<host>Template ZAS Agent</host>
|
||||
<key>system.cpu.load[percpu,avg15]</key>
|
||||
</item>
|
||||
</graph_item>
|
||||
</graph_items>
|
||||
</graph>
|
||||
<graph>
|
||||
<uuid>f25064d88b964a678fac7ea6095b238a</uuid>
|
||||
<name>CPU utilization</name>
|
||||
<show_triggers>NO</show_triggers>
|
||||
<type>STACKED</type>
|
||||
<ymin_type_1>FIXED</ymin_type_1>
|
||||
<ymax_type_1>FIXED</ymax_type_1>
|
||||
<graph_items>
|
||||
<graph_item>
|
||||
<sortorder>4</sortorder>
|
||||
<drawtype>FILLED_REGION</drawtype>
|
||||
<color>999900</color>
|
||||
<item>
|
||||
<host>Template ZAS Agent</host>
|
||||
<key>system.cpu.util[,iowait]</key>
|
||||
</item>
|
||||
</graph_item>
|
||||
<graph_item>
|
||||
<sortorder>5</sortorder>
|
||||
<drawtype>FILLED_REGION</drawtype>
|
||||
<color>990000</color>
|
||||
<item>
|
||||
<host>Template ZAS Agent</host>
|
||||
<key>system.cpu.util[,system]</key>
|
||||
</item>
|
||||
</graph_item>
|
||||
<graph_item>
|
||||
<sortorder>6</sortorder>
|
||||
<drawtype>FILLED_REGION</drawtype>
|
||||
<color>000099</color>
|
||||
<item>
|
||||
<host>Template ZAS Agent</host>
|
||||
<key>system.cpu.util[,user]</key>
|
||||
</item>
|
||||
</graph_item>
|
||||
</graph_items>
|
||||
</graph>
|
||||
</graphs>
|
||||
</zabbix_export>
|
||||
Reference in New Issue
Block a user