inital version

This commit is contained in:
2025-02-02 12:40:13 +01:00
parent 90a83b0486
commit 3f826ef752
5 changed files with 599 additions and 0 deletions

207
compose.yml Normal file
View File

@@ -0,0 +1,207 @@
services:
##### ICINGAWEB2 #####
icingaweb2:
image: git.ao-it.net/docker/icingaweb2:latest
hostname: icingaweb2
depends_on:
- db_icingaweb
restart: always
volumes:
- ./files/icingaweb2:/data
ports:
- 8080:8080
networks:
- icinga
environment:
## icingaweb2 general
- ICINGAWEB2_DB_RESOURCE_NAME=${ICINGAWEB_DB_RESOURCE_NAME:-icingaweb_db}
- ICINGAWEB2_DEFAULT_ADMIN_USER=${ICINGAWEB_DEFAULT_ADMIN_USER:-icingaadmin}
- ICINGAWEB2_DEFAULT_ADMIN_PASS=${ICINGAWEB_DEFAULT_ADMIN_PASS:-icingaadmin}
## icingaweb2: conf.ini
- ICINGAWEB2_CONF__logging__log=php
- ICINGAWEB2_CONF__logging__level=ERROR
- ICINGAWEB2_CONF__logging__application=icingaweb2
- ICINGAWEB2_CONF__global__config_backend=db
- ICINGAWEB2_CONF__global__config_resource=${ICINGAWEB_DB_RESOURCE_NAME:-icingaweb_db}
## icingaweb2: resources.ini
### user & resource db for icingaweb2
- ICINGAWEB2_RESOURCES__${ICINGAWEB_DB_RESOURCE_NAME:-icingaweb_db}__type=db
- ICINGAWEB2_RESOURCES__${ICINGAWEB_DB_RESOURCE_NAME:-icingaweb_db}__db=mysql
- ICINGAWEB2_RESOURCES__${ICINGAWEB_DB_RESOURCE_NAME:-icingaweb_db}__host=${ICINGAWEB_DB_HOST:-db_icingaweb}
- ICINGAWEB2_RESOURCES__${ICINGAWEB_DB_RESOURCE_NAME:-icingaweb_db}__dbname=${ICINGAWEB_DB:-icingaweb}
- ICINGAWEB2_RESOURCES__${ICINGAWEB_DB_RESOURCE_NAME:-icingaweb_db}__username=${ICINGAWEB_DB_USER:-icingaweb}
- ICINGAWEB2_RESOURCES__${ICINGAWEB_DB_RESOURCE_NAME:-icingaweb_db}__password=${ICINGAWEB_DB_PASS:-icingaweb}
- ICINGAWEB2_RESOURCES__${ICINGAWEB_DB_RESOURCE_NAME:-icingaweb_db}__charset=utf8mb4
### module: icingadb db resource
- ICINGAWEB2_RESOURCES__${ICINGAWDB_RESOURCE_NAME:-icingadb}__type=db
- ICINGAWEB2_RESOURCES__${ICINGAWDB_RESOURCE_NAME:-icingadb}__db=mysql
- ICINGAWEB2_RESOURCES__${ICINGAWDB_RESOURCE_NAME:-icingadb}__host=${ICINGA_DB_HOST:-db_icinga}
- ICINGAWEB2_RESOURCES__${ICINGAWDB_RESOURCE_NAME:-icingadb}__dbname=${ICINGA_DB:-icingadb}
- ICINGAWEB2_RESOURCES__${ICINGAWDB_RESOURCE_NAME:-icingadb}__username=${ICINGA_DB_USER:-icingadb}
- ICINGAWEB2_RESOURCES__${ICINGAWDB_RESOURCE_NAME:-icingadb}__password=${ICINGA_DB_PASS:-icingadb}
- ICINGAWEB2_RESOURCES__${ICINGAWDB_RESOURCE_NAME:-icingadb}__charset=utf8mb4
## icingaweb2: authencitation.ini
- ICINGAWEB2_AUTH__icingaweb2__backend=db
- ICINGAWEB2_AUTH__icingaweb2__resource=${ICINGAWEB_DB_RESOURCE_NAME:-icingaweb_db}
## icingaweb2: groups.ini
- ICINGAWEB2_GROUPS__icingaweb2__backend=db
- ICINGAWEB2_GROUPS__icingaweb2__resource=${ICINGAWEB_DB_RESOURCE_NAME:-icingaweb_db}
## icingaweb2: roles.ini
- ICINGAWEB2_ROLES__${ICINGAWEB_DEFAULT_ADMIN_ROLE:-Administrators}__groups=${ICINGAWEB_DEFAULT_ADMIN_ROLE:-Administrators}
- ICINGAWEB2_ROLES__${ICINGAWEB_DEFAULT_ADMIN_ROLE:-Administrators}__permissions="*"
- ICINGAWEB2_ROLES__${ICINGAWEB_DEFAULT_ADMIN_ROLE:-Administrators}__users=${ICINGAWEB_DEFAULT_ADMIN_USER:-icingaadmin}
## module: icingadb
### icingadb: conf.ini
- ICINGAWEB2_ICINGADB_CONF__icingadb__resource=icingadb
### icingadb: redis.ini
- ICINGAWEB2_ICINGADB_REDIS__redis1__host=${ICINGADB_REDIS_HOST:-db_redis}
- ICINGAWEB2_ICINGADB_REDIS__redis1__port=${ICINGADB_REDIS_PORT:-6379}
### icingadb: commandtransports.ini
- ICINGAWEB2_ICINGADB_CMD__icinga2__transport=${ICINGADB_CMD_TYPE:-api}
- ICINGAWEB2_ICINGADB_CMD__icinga2__host=${ICINGA_API_HOST:-icinga2}
- ICINGAWEB2_ICINGADB_CMD__icinga2__port=${ICINGA_API_PORT:-5665}
- ICINGAWEB2_ICINGADB_CMD__icinga2__username=${ICINGA_API_ICINGAWEB_USER:-icingaweb}
- ICINGAWEB2_ICINGADB_CMD__icinga2__password=${ICINGA_API_ICINGAWEB_PASS:-icingaweb}
## module: grafana
### grafana: conf.ini
- ICINGAWEB2_GRAFANA_CONF__grafana__host=${GRAFANA_HOST:-grafana}:${GRAFANA_PORT:-3000}
- ICINGAWEB2_GRAFANA_CONF__grafana__defaultdashboard=${GRAFANA_DASHBOARD_NAME:-icinga2-default}
- ICINGAWEB2_GRAFANA_CONF__grafana__defaultdashboarduid=${GRAFANA_DASHBOARD_UID:-icinga2-default}
- ICINGAWEB2_GRAFANA_CONF__grafana__defaultdashboardpanelid=1
- ICINGAWEB2_GRAFANA_CONF__grafana__defaultorgid=1
- ICINGAWEB2_GRAFANA_CONF__grafana__timerange=12h
- ICINGAWEB2_GRAFANA_CONF__grafana__shadows="1"
- ICINGAWEB2_GRAFANA_CONF__grafana__accessmode=iframe
db_icingaweb:
image: mariadb:latest
hostname: ${ICINGAWEB_DB_HOST:-db_icingaweb}
restart: always
volumes:
- ./files/dbs/icingaweb:/var/lib/mysql
networks:
- icinga
environment:
MARIADB_RANDOM_ROOT_PASSWORD: yes
MARIADB_DATABASE: ${ICINGAWEB_DB:-icingaweb}
MARIADB_USER: ${ICINGAWEB_DB_USER:-icingaweb}
MARIADB_PASSWORD: ${ICINGAWEB_DB_PASS:-icingaweb}
grafana:
image: grafana/grafana:latest
hostname: grafana
depends_on:
- icingaweb2
restart: always
#user: '0'
ports:
- ${GRAFANA_PORT:-3000}:3000
networks:
- icinga
volumes:
- ./grafana/default.source.yml:/etc/grafana/provisioning/datasources/default.yml
- ./grafana/default.dashboard.yml:/etc/grafana/provisioning/dashboards/default.yml
- ./grafana/icinga2-default.json:/var/lib/grafana/dashboards/${GRAFANA_DASHBOARD_FILE:-icinga2-default.json}
environment:
## required configs
GF_AUTH_ANONYMOUS_ENABLED: true
GF_SECURITY_ALLOW_EMBEDDING: true
GF_AUTH_ANONYMOUS_ORG_ROLE: Viewer
GF_AUTH_ANONYMOUS_HIDE_VERSION: true
## user settings
GF_SECURITY_ADMIN_USER: ${GRAFANA_ADMIN_USER:-grafanaadmin}
GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_ADMIN_PASS:-grafanaadmin}
## default data source
GRAFANA_DEFAULT_SOURCE_NAME: ${ICINGA_INFLUX_HOST:-db_influxdb}
GRAFANA_DEFAULT_SOURCE_UID: ${ICINGA_INFLUX_HOST:-db_influxdb}
GRAFANA_DEFAULT_SOURCE_DB: ${ICINGA_INFLUX_DB:-icinga}
GRAFANA_DEFAULT_SOURCE_HOST: ${ICINGA_INFLUX_HOST:-db_influxdb}
GRAFANA_DEFAULT_SOURCE_PORT: ${ICINGA_INFLUX_PORT:-8086}
GRAFANA_DEFAULT_SOURCE_USER: ${ICINGA_INFLUX_USER:-icinga}
GRAFANA_DEFAULT_SOURCE_PASS: ${ICINGA_INFLUX_PASS:-icinga}
## default dashboard
GRAFANA_DEFAULT_DASHBOARD_NAME: ${GRAFANA_DASHBOARD_NAME:-icinga2-default}
GRAFANA_DEFAULT_DASHBOARD_FILE: ${GRAFANA_DASHBOARD_FILE:-icinga2-default.json}
##### ICINGA2 #####
db_icinga:
image: mariadb
hostname: ${ICINGA_DB_HOST:-db_icinga}
restart: always
volumes:
- ./files/dbs/icinga:/var/lib/mysql
networks:
- icinga
environment:
MARIADB_RANDOM_ROOT_PASSWORD: yes
MARIADB_DATABASE: ${ICINGA_DB:-icingadb}
MARIADB_USER: ${ICINGA_DB_USER:-icingadb}
MARIADB_PASSWORD: ${ICINGA_DB_PASS:-icingadb}
db_redis:
image: redis
hostname: ${ICINGADB_REDIS_HOST:-db_redis}
restart: always
networks:
- icinga
# sync handler between icingadb (db_icinga) and redis (db_redis)
icingadb:
image: icinga/icingadb
depends_on:
- db_redis
- db_icinga
restart: always
networks:
- icinga
environment:
- ICINGADB_REDIS_HOST=${ICINGADB_REDIS_HOST:-db_redis}
- ICINGADB_REDIS_PORT=${ICINGADB_REDIS_PORT:-6379}
- ICINGADB_DATABASE_HOST=${ICINGA_DB_HOST:-db_icinga}
- ICINGADB_DATABASE_PORT=${ICINGA_DB_PORT:-3306}
- ICINGADB_DATABASE_DATABASE=${ICINGA_DB:-icingadb}
- ICINGADB_DATABASE_USER=${ICINGA_DB_USER:-icingadb}
- ICINGADB_DATABASE_PASSWORD=${ICINGA_DB_PASS:-icingadb}
db_influxdb:
image: influxdb:1.8
hostname: ${ICINGA_INFLUX_HOST:-db_influxdb}
restart: always
networks:
- icinga
volumes:
- ./files/dbs/influx:/vol01/Docker/monitoring
environment:
- INFLUXDB_DB=${ICINGA_INFLUX_DB:-icinga}
- INFLUXDB_USER=${ICINGA_INFLUX_USER:-icinga}
- INFLUXDB_ADMIN_ENABLED=true
- INFLUXDB_ADMIN_USER=${INFLUX_ADMIN_USER:-icinga}
- INFLUXDB_ADMIN_PASSWORD=${INFLUX_ADMIN_PASS:-icinga}
icinga2:
image: git.ao-it.net/docker/icinga2:latest
hostname: ${ICINGA_API_HOST:-icinga2}
depends_on:
- db_redis
restart: always
volumes:
- ./files/icinga2:/data
ports:
- 5665:5665 # only need if you plan to use api from other sources as icingaweb2
networks:
- icinga
#- backend
environment:
# REMOVE VARS HERE IF YOU EDIT THE CONFIG DIRECTLY!!
# The variables are primarily for the initial setup, later editing is recommended directly in the icinga config.
# Empty or non-existent vars do not change anything
ICINGA2_API_USER_ROOT_PASS: ${API_ROOT_PASS:-changeME!} # only on fist init! set api user root password
ICINGA2_API_USER_ICINGAWEB_PASS: ${ICINGA_API_ICINGAWEB_PASS:-icingaweb} # only on first init! create api user icingaweb and set password
ICINGA2_ICINGADB_REDIS_HOST: ${ICINGADB_REDIS_HOST:-db_redis}
ICINGA2_ICINGADB_REDIS_PORT: ${ICINGADB_REDIS_PORT:-6379}
ICINGA2_INFLUXDB_HOST: ${ICINGA_INFLUX_HOST:-db_influxdb}
ICINGA2_INFLUXDB_PORT: ${ICINGA_INFLUX_PORT:-8086}
ICINGA2_INFLUXDB_DB: ${ICINGA_INFLUX_DB:-icinga}
networks:
icinga:

62
env.sample Normal file
View File

@@ -0,0 +1,62 @@
# icinga environment
### icinga
API_ROOT_PASS=changeME!
### icingaweb db connection
ICINGAWEB_DB_RESOURCE_NAME=icingaweb_db
ICINGAWEB_DB=icingaweb
ICINGAWEB_DB_HOST=db_icingaweb
ICINGAWEB_DB_USER=icingaweb
ICINGAWEB_DB_PASS=icingaweb
### icingaweb inital login
ICINGAWEB_DEFAULT_ADMIN_ROLE=Administrators
ICINGAWEB_DEFAULT_ADMIN_USER=icingaadmin
ICINGAWEB_DEFAULT_ADMIN_PASS=icingaadmin
### influxdb admin
INFLUX_ADMIN_USER=icinga
INFLUX_ADMIN_PASS=icinga
### icingadb SQL connection
ICINGAWDB_RESOURCE_NAME=icingadb
ICINGA_DB=icingadb
ICINGA_DB_HOST=db_icinga
ICINGA_DB_PORT=3306
ICINGA_DB_USER=icingadb
ICINGA_DB_PASS=icingadb
### icingadb redis connection
ICINGADB_REDIS_HOST=redis
ICINGADB_REDIS_PORT=6379
### icingadb command transport
ICINGADB_CMD_TYPE=api
ICINGA_API_HOST=icinga2
ICINGA_API_PORT=5665
ICINGA_API_ICINGAWEB_USER=icingaweb
ICINGA_API_ICINGAWEB_PASS=icingaweb
## grafana settings
### host settings
#> GRAFANA_HOST must be change else you dont have graphs
#> GRAFANA_HOST must be a network address what your client can reach
GRAFANA_HOST='' # to get ip: $(hostname -I | awk '{print $1}') # sets first ip of system, can be wrong!
GRAFANA_PORT=3000
### user settings
GRAFANA_ADMIN_USER=grafanaadmin
GRAFANA_ADMIN_PASS=grafanaadmin
### default dashboard
GRAFANA_DASHBOARD_NAME=icinga2-default
GRAFANA_DASHBOARD_UID=icinga2-default # must be change in icinga2-default.json too
GRAFANA_DASHBOARD_FILE=icinga2-default.json
### default data source
ICINGA_INFLUX_HOST=db_influxdb # must be change in icinga2-default.json too
ICINGA_INFLUX_PORT=8086
ICINGA_INFLUX_USER=icinga
ICINGA_INFLUX_DB=icinga
ICINGA_INFLUX_PASS=icinga

View File

@@ -0,0 +1,7 @@
apiVersion: 1
providers:
- name: $GRAFANA_DEFAULT_DASHBOARD_NAME
type: file
options:
path: /var/lib/grafana/dashboards/$GRAFANA_DEFAULT_DASHBOARD_FILE

View File

@@ -0,0 +1,15 @@
apiVersion: 1
datasources:
- name: $GRAFANA_DEFAULT_SOURCE_NAME
type: influxdb
uid: $GRAFANA_DEFAULT_SOURCE_UID
access: proxy
user: $GRAFANA_DEFAULT_SOURCE_USER
url: http://$GRAFANA_DEFAULT_SOURCE_HOST:$GRAFANA_DEFAULT_SOURCE_PORT
isDefault: true
jsonData:
dbName: $GRAFANA_DEFAULT_SOURCE_DB
httpMode: GET
secureJsonData:
password: $GRAFANA_DEFAULT_SOURCE_PASS

View File

@@ -0,0 +1,308 @@
{
"__inputs": [
{
"name": "DS_ICINGA2",
"label": "Icinga2",
"value": "db_influxdb",
"description": "",
"type": "datasource",
"pluginId": "influxdb",
"pluginName": "InfluxDB"
},
{
"name": "VAR_HOSTNAME",
"type": "constant",
"label": "hostname",
"value": "null",
"description": ""
},
{
"name": "VAR_SERVICE",
"type": "constant",
"label": "service",
"value": "null",
"description": ""
},
{
"name": "VAR_COMMAND",
"type": "constant",
"label": "command",
"value": "null",
"description": ""
}
],
"__requires": [
{
"type": "grafana",
"id": "grafana",
"name": "Grafana",
"version": "4.6.3"
},
{
"type": "panel",
"id": "graph",
"name": "Graph",
"version": ""
},
{
"type": "datasource",
"id": "influxdb",
"name": "InfluxDB",
"version": "1.0.0"
}
],
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": "-- Grafana --",
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"type": "dashboard"
}
]
},
"description": "Show all metrics from a Icinga2 service or host",
"editable": true,
"gnetId": null,
"graphTooltip": 0,
"hideControls": false,
"id": null,
"links": [],
"rows": [
{
"collapse": false,
"height": "250px",
"panels": [
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "db_influxdb",
"fill": 1,
"id": 1,
"legend": {
"alignAsTable": false,
"avg": false,
"current": false,
"max": false,
"min": false,
"rightSide": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"links": [],
"nullPointMode": "null",
"percentage": false,
"pointradius": 1,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"span": 12,
"stack": false,
"steppedLine": false,
"targets": [
{
"alias": "$tag_metric",
"dsType": "influxdb",
"groupBy": [
{
"params": [
"$__interval"
],
"type": "time"
},
{
"params": [
"metric"
],
"type": "tag"
},
{
"params": [
"none"
],
"type": "fill"
}
],
"measurement": "/^$command$/",
"orderByTime": "ASC",
"policy": "default",
"refId": "A",
"resultFormat": "time_series",
"select": [
[
{
"params": [
"value"
],
"type": "field"
},
{
"params": [],
"type": "mean"
}
]
],
"tags": [
{
"key": "hostname",
"operator": "=~",
"value": "/^$hostname$/"
},
{
"condition": "AND",
"key": "service",
"operator": "=~",
"value": "/^$service$/"
}
]
}
],
"thresholds": [],
"timeFrom": null,
"timeShift": null,
"title": "$service",
"tooltip": {
"shared": true,
"sort": 1,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": false
}
]
}
],
"repeat": null,
"repeatIteration": null,
"repeatRowId": null,
"showTitle": false,
"title": "Default",
"titleSize": "h6"
}
],
"schemaVersion": 14,
"style": "dark",
"tags": [
"Icinga2",
"influxdb"
],
"templating": {
"list": [
{
"current": {
"value": "${VAR_HOSTNAME}",
"text": "${VAR_HOSTNAME}"
},
"hide": 2,
"label": null,
"name": "hostname",
"options": [
{
"value": "${VAR_HOSTNAME}",
"text": "${VAR_HOSTNAME}"
}
],
"query": "${VAR_HOSTNAME}",
"type": "custom"
},
{
"current": {
"value": "${VAR_SERVICE}",
"text": "${VAR_SERVICE}"
},
"hide": 2,
"label": null,
"name": "service",
"options": [
{
"value": "${VAR_SERVICE}",
"text": "${VAR_SERVICE}"
}
],
"query": "${VAR_SERVICE}",
"type": "custom"
},
{
"current": {
"value": "${VAR_COMMAND}",
"text": "${VAR_COMMAND}"
},
"hide": 2,
"label": null,
"name": "command",
"options": [
{
"value": "${VAR_COMMAND}",
"text": "${VAR_COMMAND}"
}
],
"query": "${VAR_COMMAND}",
"type": "custom"
}
]
},
"time": {
"from": "now-6h",
"to": "now"
},
"timepicker": {
"refresh_intervals": [
"5s",
"10s",
"30s",
"1m",
"5m",
"15m",
"30m",
"1h",
"2h",
"1d"
],
"time_options": [
"5m",
"15m",
"1h",
"6h",
"12h",
"24h",
"2d",
"7d",
"30d"
]
},
"timezone": "",
"title": "icinga2-default",
"uid": "icinga2-default",
"version": 3
}