Compare commits
2 Commits
ae4e83dafe
...
3668563736
| Author | SHA1 | Date | |
|---|---|---|---|
| 3668563736 | |||
| d750ad84a5 |
68
zabbix-tests/host-cleanup.py
Executable file
68
zabbix-tests/host-cleanup.py
Executable file
@@ -0,0 +1,68 @@
|
||||
#!/usr/bin/env python3
|
||||
import requests
|
||||
import json
|
||||
import time
|
||||
|
||||
# === CONFIGURATION ===
|
||||
ZABBIX_URL = "http://10.0.0.101:8887/api_jsonrpc.php"
|
||||
ZABBIX_TOKEN = "c785634354e760a6843055ba4581bc7b6cd6eb2ec75f7c2a79f251c1719933f7"
|
||||
GROUP_ID = "19"
|
||||
BATCH_SIZE = 100
|
||||
HOST_PATTERN = "dummy-host-"
|
||||
|
||||
HEADERS = {
|
||||
"Content-Type": "application/json-rpc",
|
||||
"Authorization": f"Bearer {ZABBIX_TOKEN}"
|
||||
}
|
||||
|
||||
def zbx_request(method, params):
|
||||
payload = {
|
||||
"jsonrpc": "2.0",
|
||||
"method": method,
|
||||
"params": params,
|
||||
"id": int(time.time())
|
||||
}
|
||||
r = requests.post(ZABBIX_URL, headers=HEADERS, data=json.dumps(payload))
|
||||
r.raise_for_status()
|
||||
resp = r.json()
|
||||
if "error" in resp:
|
||||
raise Exception(f"API error: {resp['error']}")
|
||||
return resp
|
||||
|
||||
def cleanup_hosts():
|
||||
# Get all hosts in the group
|
||||
resp = zbx_request("host.get", {
|
||||
"groupids": [GROUP_ID],
|
||||
"output": ["hostid", "host"]
|
||||
})
|
||||
|
||||
# Filter hosts that contain the dummy pattern
|
||||
hosts = [h for h in resp.get("result", []) if HOST_PATTERN in h["host"]]
|
||||
|
||||
if not hosts:
|
||||
print("No dummy hosts found")
|
||||
return
|
||||
|
||||
print(f"Deleting {len(hosts)} hosts")
|
||||
|
||||
# Delete in batches
|
||||
host_ids = [h["hostid"] for h in hosts]
|
||||
total_deleted = 0
|
||||
|
||||
for i in range(0, len(host_ids), BATCH_SIZE):
|
||||
batch = host_ids[i:i + BATCH_SIZE]
|
||||
try:
|
||||
resp = zbx_request("host.delete", batch)
|
||||
deleted = len(resp.get("result", {}).get("hostids", []))
|
||||
total_deleted += deleted
|
||||
print(f"Deleted batch {i//BATCH_SIZE + 1}: {deleted} hosts")
|
||||
except Exception as e:
|
||||
print(f"Error in batch {i//BATCH_SIZE + 1}: {e}")
|
||||
|
||||
if i + BATCH_SIZE < len(host_ids):
|
||||
time.sleep(0.5)
|
||||
|
||||
print(f"Total deleted: {total_deleted}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
cleanup_hosts()
|
||||
77
zabbix-tests/host-creator.py
Executable file
77
zabbix-tests/host-creator.py
Executable file
@@ -0,0 +1,77 @@
|
||||
#!/usr/bin/env python3
|
||||
import requests
|
||||
import json
|
||||
import time
|
||||
|
||||
# === CONFIGURATION ===
|
||||
ZABBIX_URL = "http://10.0.0.101:8887/api_jsonrpc.php"
|
||||
ZABBIX_TOKEN = "c785634354e760a6843055ba4581bc7b6cd6eb2ec75f7c2a79f251c1719933f7"
|
||||
PROXY_GROUP_ID = "1" # your proxy group ID
|
||||
GROUP_ID = "19" # host group for these hosts
|
||||
NUM_HOSTS = 1000 # number of hosts to create
|
||||
BATCH_SIZE = 100 # how many to create per call
|
||||
|
||||
HEADERS = {
|
||||
"Content-Type": "application/json-rpc",
|
||||
"Authorization": f"Bearer {ZABBIX_TOKEN}"
|
||||
}
|
||||
|
||||
def zbx_request(method, params):
|
||||
"""Send Zabbix API request using Bearer token authentication."""
|
||||
payload = {
|
||||
"jsonrpc": "2.0",
|
||||
"method": method,
|
||||
"params": params,
|
||||
"id": int(time.time())
|
||||
}
|
||||
r = requests.post(ZABBIX_URL, headers=HEADERS, data=json.dumps(payload))
|
||||
r.raise_for_status()
|
||||
resp = r.json()
|
||||
if "error" in resp:
|
||||
raise Exception(f"Zabbix API error: {resp['error']}")
|
||||
return resp
|
||||
|
||||
def create_hosts():
|
||||
hosts = []
|
||||
for i in range(1, NUM_HOSTS + 1):
|
||||
host_name = f"dummy-host-{i:04d}"
|
||||
host = {
|
||||
"host": host_name,
|
||||
"interfaces": [{
|
||||
"type": 1, # Zabbix agent
|
||||
"main": 1,
|
||||
"useip": 1,
|
||||
"ip": "127.0.0.1",
|
||||
"dns": "",
|
||||
"port": "10050"
|
||||
}],
|
||||
"groups": [{"groupid": GROUP_ID}],
|
||||
"templates": [{"templateid": "10048"}], # assign template ID 10048
|
||||
"monitored_by": 2, # 2 = proxy group
|
||||
"proxy_groupid": PROXY_GROUP_ID, # your proxy group ID
|
||||
"items": [{
|
||||
"name": "Dummy metric",
|
||||
"key_": "dummy.value",
|
||||
"type": 2, # trapper
|
||||
"value_type": 0, # numeric float
|
||||
"delay": "60s"
|
||||
}]
|
||||
}
|
||||
hosts.append(host)
|
||||
|
||||
for i in range(0, len(hosts), BATCH_SIZE):
|
||||
batch = hosts[i:i + BATCH_SIZE]
|
||||
print(f"Creating hosts {i+1}–{i+len(batch)}...")
|
||||
try:
|
||||
resp = zbx_request("host.create", batch)
|
||||
created = len(resp.get("result", {}).get("hostids", []))
|
||||
print(f"✅ Created {created} hosts.")
|
||||
except Exception as e:
|
||||
print(f"❌ Error in batch {i+1}–{i+len(batch)}: {e}")
|
||||
time.sleep(1)
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
create_hosts()
|
||||
except Exception as e:
|
||||
print(f"Fatal error: {e}")
|
||||
28
zabbix-tests/server-docker/.env
Normal file
28
zabbix-tests/server-docker/.env
Normal file
@@ -0,0 +1,28 @@
|
||||
# Database Configuration
|
||||
MYSQL_DATABASE=zabbix
|
||||
MYSQL_USER=zabbix
|
||||
MYSQL_PASSWORD=strong-password
|
||||
MYSQL_ROOT_PASSWORD=very-strong-password
|
||||
|
||||
# Image Versions (uncomment to override defaults)
|
||||
ZABBIX_VERSION=latest
|
||||
# MYSQL_VERSION=8.4.0-oraclelinux8 # Keep oraclelinux variant for architecture compatibility
|
||||
|
||||
# Port Configuration
|
||||
ZABBIX_SERVER_PORT=10051
|
||||
ZABBIX_WEB_PORT=8887
|
||||
|
||||
# Server Settings
|
||||
PHP_TIMEZONE=Europe/Warsaw
|
||||
ZBX_STARTSNMPTRAPPER=1
|
||||
ZBX_SNMPTRAPPERFILE=/tmp/traps.log
|
||||
ZBX_CACHESIZE=128M
|
||||
ZBX_VALUECACHESIZE=64M
|
||||
ZBX_TRENDCACHESIZE=32M
|
||||
|
||||
# Common Proxy Settings (applied to all proxies)
|
||||
PROXY_CACHE_SIZE=128M
|
||||
PROXY_HISTORY_CACHE_SIZE=32M
|
||||
PROXY_HISTORY_INDEX_CACHE_SIZE=16M
|
||||
PROXY_BUFFER_MODE=hybrid
|
||||
PROXY_MEMORY_BUFFER_SIZE=64M
|
||||
224
zabbix-tests/server-docker/docker-compose.yaml
Normal file
224
zabbix-tests/server-docker/docker-compose.yaml
Normal file
@@ -0,0 +1,224 @@
|
||||
### This will create a Zabbix server with six active proxies and a MySQL database.
|
||||
### You need to configure proxies in Zabbix frontend after deployment.
|
||||
### Adjust .env file for customization.
|
||||
|
||||
services:
|
||||
mysql-server:
|
||||
image: mysql:${MYSQL_VERSION:-8.4.0-oraclelinux8}
|
||||
container_name: zabbix-mysql-server
|
||||
command:
|
||||
- 'mysqld'
|
||||
- '--character-set-server=utf8mb4'
|
||||
- '--collation-server=utf8mb4_bin'
|
||||
- '--log-bin-trust-function-creators=1'
|
||||
environment:
|
||||
- MYSQL_DATABASE=${MYSQL_DATABASE}
|
||||
- MYSQL_USER=${MYSQL_USER}
|
||||
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
|
||||
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
|
||||
volumes:
|
||||
- ./zabbix/mysql:/var/lib/mysql
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- zabbix-net
|
||||
|
||||
zabbix-server:
|
||||
image: zabbix/zabbix-server-mysql:${ZABBIX_VERSION:-latest}
|
||||
container_name: zabbix-server
|
||||
depends_on:
|
||||
- mysql-server
|
||||
ports:
|
||||
- "${ZABBIX_SERVER_PORT}:10051"
|
||||
environment:
|
||||
- DB_SERVER_HOST=mysql-server
|
||||
- MYSQL_DATABASE=${MYSQL_DATABASE}
|
||||
- MYSQL_USER=${MYSQL_USER}
|
||||
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
|
||||
- ZBX_STARTSNMPTRAPPER=${ZBX_STARTSNMPTRAPPER}
|
||||
- ZBX_SNMPTRAPPERFILE=${ZBX_SNMPTRAPPERFILE}
|
||||
- ZBX_CACHESIZE=${ZBX_CACHESIZE}
|
||||
- ZBX_VALUECACHESIZE=${ZBX_VALUECACHESIZE}
|
||||
- ZBX_TRENDCACHESIZE=${ZBX_TRENDCACHESIZE}
|
||||
volumes:
|
||||
- ./zabbix/alertscripts:/usr/lib/zabbix/alertscripts
|
||||
- ./zabbix/externalscripts:/usr/lib/zabbix/externalscripts
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- zabbix-net
|
||||
|
||||
zabbix-web:
|
||||
image: zabbix/zabbix-web-nginx-mysql:${ZABBIX_VERSION:-latest}
|
||||
container_name: zabbix-web
|
||||
depends_on:
|
||||
- mysql-server
|
||||
- zabbix-server
|
||||
ports:
|
||||
- "${ZABBIX_WEB_PORT}:8080"
|
||||
environment:
|
||||
- DB_SERVER_HOST=mysql-server
|
||||
- MYSQL_DATABASE=${MYSQL_DATABASE}
|
||||
- MYSQL_USER=${MYSQL_USER}
|
||||
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
|
||||
- ZBX_SERVER_HOST=zabbix-server
|
||||
- PHP_TZ=${PHP_TIMEZONE}
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- zabbix-net
|
||||
|
||||
zabbix-proxy-active-01:
|
||||
image: zabbix/zabbix-proxy-sqlite3:${ZABBIX_VERSION:-latest}
|
||||
container_name: zabbix-proxy-active-01
|
||||
depends_on:
|
||||
- zabbix-server
|
||||
ports:
|
||||
- "10101:10051"
|
||||
environment:
|
||||
- ZBX_HOSTNAME=zabbix-proxy-active-01
|
||||
- ZBX_SERVER_HOST=zabbix-server
|
||||
- ZBX_PROXYMODE=0
|
||||
- ZBX_CACHESIZE=${PROXY_CACHE_SIZE}
|
||||
- ZBX_HISTORYCACHESIZE=${PROXY_HISTORY_CACHE_SIZE}
|
||||
- ZBX_HISTORYINDEXCACHESIZE=${PROXY_HISTORY_INDEX_CACHE_SIZE}
|
||||
- ZBX_PROXYBUFFERMODE=${PROXY_BUFFER_MODE}
|
||||
- ZBX_PROXYMEMORYBUFFERSIZE=${PROXY_MEMORY_BUFFER_SIZE}
|
||||
volumes:
|
||||
- ./zabbix/proxy-01:/var/lib/zabbix/db_data:rw
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- zabbix-net
|
||||
|
||||
zabbix-proxy-active-02:
|
||||
image: zabbix/zabbix-proxy-sqlite3:${ZABBIX_VERSION:-latest}
|
||||
container_name: zabbix-proxy-active-02
|
||||
depends_on:
|
||||
- zabbix-server
|
||||
ports:
|
||||
- "10102:10051"
|
||||
environment:
|
||||
- ZBX_HOSTNAME=zabbix-proxy-active-02
|
||||
- ZBX_SERVER_HOST=zabbix-server
|
||||
- ZBX_PROXYMODE=0
|
||||
- ZBX_CACHESIZE=${PROXY_CACHE_SIZE}
|
||||
- ZBX_HISTORYCACHESIZE=${PROXY_HISTORY_CACHE_SIZE}
|
||||
- ZBX_HISTORYINDEXCACHESIZE=${PROXY_HISTORY_INDEX_CACHE_SIZE}
|
||||
- ZBX_PROXYBUFFERMODE=${PROXY_BUFFER_MODE}
|
||||
- ZBX_PROXYMEMORYBUFFERSIZE=${PROXY_MEMORY_BUFFER_SIZE}
|
||||
volumes:
|
||||
- ./zabbix/proxy-02:/var/lib/zabbix/db_data:rw
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- zabbix-net
|
||||
|
||||
zabbix-proxy-active-03:
|
||||
image: zabbix/zabbix-proxy-sqlite3:${ZABBIX_VERSION:-latest}
|
||||
container_name: zabbix-proxy-active-03
|
||||
depends_on:
|
||||
- zabbix-server
|
||||
ports:
|
||||
- "10103:10051"
|
||||
environment:
|
||||
- ZBX_HOSTNAME=zabbix-proxy-active-03
|
||||
- ZBX_SERVER_HOST=zabbix-server
|
||||
- ZBX_PROXYMODE=0
|
||||
- ZBX_CACHESIZE=${PROXY_CACHE_SIZE}
|
||||
- ZBX_HISTORYCACHESIZE=${PROXY_HISTORY_CACHE_SIZE}
|
||||
- ZBX_HISTORYINDEXCACHESIZE=${PROXY_HISTORY_INDEX_CACHE_SIZE}
|
||||
- ZBX_PROXYBUFFERMODE=${PROXY_BUFFER_MODE}
|
||||
- ZBX_PROXYMEMORYBUFFERSIZE=${PROXY_MEMORY_BUFFER_SIZE}
|
||||
volumes:
|
||||
- ./zabbix/proxy-03:/var/lib/zabbix/db_data:rw
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- zabbix-net
|
||||
|
||||
zabbix-proxy-active-04:
|
||||
image: zabbix/zabbix-proxy-sqlite3:${ZABBIX_VERSION:-latest}
|
||||
container_name: zabbix-proxy-active-04
|
||||
depends_on:
|
||||
- zabbix-server
|
||||
ports:
|
||||
- "10104:10051"
|
||||
environment:
|
||||
- ZBX_HOSTNAME=zabbix-proxy-active-04
|
||||
- ZBX_SERVER_HOST=zabbix-server
|
||||
- ZBX_PROXYMODE=0
|
||||
- ZBX_CACHESIZE=${PROXY_CACHE_SIZE}
|
||||
- ZBX_HISTORYCACHESIZE=${PROXY_HISTORY_CACHE_SIZE}
|
||||
- ZBX_HISTORYINDEXCACHESIZE=${PROXY_HISTORY_INDEX_CACHE_SIZE}
|
||||
- ZBX_PROXYBUFFERMODE=${PROXY_BUFFER_MODE}
|
||||
- ZBX_PROXYMEMORYBUFFERSIZE=${PROXY_MEMORY_BUFFER_SIZE}
|
||||
volumes:
|
||||
- ./zabbix/proxy-04:/var/lib/zabbix/db_data:rw
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- zabbix-net
|
||||
|
||||
zabbix-proxy-active-05:
|
||||
image: zabbix/zabbix-proxy-sqlite3:${ZABBIX_VERSION:-latest}
|
||||
container_name: zabbix-proxy-active-05
|
||||
depends_on:
|
||||
- zabbix-server
|
||||
ports:
|
||||
- "10105:10051"
|
||||
environment:
|
||||
- ZBX_HOSTNAME=zabbix-proxy-active-05
|
||||
- ZBX_SERVER_HOST=zabbix-server
|
||||
- ZBX_PROXYMODE=0
|
||||
- ZBX_CACHESIZE=${PROXY_CACHE_SIZE}
|
||||
- ZBX_HISTORYCACHESIZE=${PROXY_HISTORY_CACHE_SIZE}
|
||||
- ZBX_HISTORYINDEXCACHESIZE=${PROXY_HISTORY_INDEX_CACHE_SIZE}
|
||||
- ZBX_PROXYBUFFERMODE=${PROXY_BUFFER_MODE}
|
||||
- ZBX_PROXYMEMORYBUFFERSIZE=${PROXY_MEMORY_BUFFER_SIZE}
|
||||
volumes:
|
||||
- ./zabbix/proxy-05:/var/lib/zabbix/db_data:rw
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- zabbix-net
|
||||
|
||||
zabbix-proxy-active-06:
|
||||
image: zabbix/zabbix-proxy-sqlite3:${ZABBIX_VERSION:-latest}
|
||||
container_name: zabbix-proxy-active-06
|
||||
depends_on:
|
||||
- zabbix-server
|
||||
ports:
|
||||
- "10106:10051"
|
||||
environment:
|
||||
- ZBX_HOSTNAME=zabbix-proxy-active-06
|
||||
- ZBX_SERVER_HOST=zabbix-server
|
||||
- ZBX_PROXYMODE=0
|
||||
- ZBX_CACHESIZE=${PROXY_CACHE_SIZE}
|
||||
- ZBX_HISTORYCACHESIZE=${PROXY_HISTORY_CACHE_SIZE}
|
||||
- ZBX_HISTORYINDEXCACHESIZE=${PROXY_HISTORY_INDEX_CACHE_SIZE}
|
||||
- ZBX_PROXYBUFFERMODE=${PROXY_BUFFER_MODE}
|
||||
- ZBX_PROXYMEMORYBUFFERSIZE=${PROXY_MEMORY_BUFFER_SIZE}
|
||||
volumes:
|
||||
- ./zabbix/proxy-06:/var/lib/zabbix/db_data:rw
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- zabbix-net
|
||||
|
||||
# zabbix-proxy-passive-03:
|
||||
# image: zabbix/zabbix-proxy-sqlite3:${ZABBIX_VERSION:-latest}
|
||||
# container_name: zabbix-proxy-passive-03
|
||||
# depends_on:
|
||||
# - zabbix-server
|
||||
# ports:
|
||||
# - "10103:10051"
|
||||
# environment:
|
||||
# - ZBX_HOSTNAME=zabbix-proxy-passive-03
|
||||
# - ZBX_SERVER_HOST=zabbix-server
|
||||
# - ZBX_PROXYMODE=1
|
||||
# - ZBX_CACHESIZE=${PROXY_CACHE_SIZE}
|
||||
# - ZBX_HISTORYCACHESIZE=${PROXY_HISTORY_CACHE_SIZE}
|
||||
# - ZBX_HISTORYINDEXCACHESIZE=${PROXY_HISTORY_INDEX_CACHE_SIZE}
|
||||
# - ZBX_PROXYBUFFERMODE=${PROXY_BUFFER_MODE}
|
||||
# - ZBX_PROXYMEMORYBUFFERSIZE=${PROXY_MEMORY_BUFFER_SIZE}
|
||||
# volumes:
|
||||
# - ./zabbix/proxy-03:/var/lib/zabbix/db_data:rw
|
||||
# restart: unless-stopped
|
||||
# networks:
|
||||
# - zabbix-net
|
||||
|
||||
networks:
|
||||
zabbix-net:
|
||||
driver: bridge
|
||||
Reference in New Issue
Block a user