add docker compose

This commit is contained in:
shooter-dev committed 2026-10-08 06:23:03 +02:00
1 parent 88db93b07f
commit f22f0f2ccc
14 files changed
+33251

No files matched your search

@@ -0,0 +1,145 @@
groups:
- name: Alertes monitoring
rules:
- alert: NodeHasSwapIn
expr: irate(node_vmstat_pswpin{job="prod"}[5m]) > 0
for: 15m
labels:
severity: critique
annotations:
identifier: "{{ $labels.instance }}"
summary: "Node has swap in (instance {{ $labels.instance }})"
description: "<!channel> La VM SWAP (in) LABELS: {{ $labels.job }} : {{ $labels.instance }}"
- alert: NodeHasSwapOut
expr: irate(node_vmstat_pswpin{job="prod"}[5m]) > 0
for: 15m
labels:
severity: critique
annotations:
identifier: "{{ $labels.instance }}"
summary: "Node has swap out (instance {{ $labels.instance }})"
description: "<!channel> La VM SWAP (out) LABELS: {{ $labels.job }} : {{ $labels.instance }}"
- alert: OutOfInodes
expr: node_filesystem_files_free{mountpoint ="/rootfs"} / node_filesystem_files{mountpoint ="/rootfs"} * 100 < 10
for: 15m
labels:
severity: critique
annotations:
identifier: "{{ $labels.instance }}"
summary: "Out of inodes (instance {{ $labels.instance }})"
description: "<!channel> Le disque n'a presque plus d'inode (< 10% restant) VALUE = {{ humanize $value }} LABELS: {{ $labels.job }} : {{ $labels.instance }}"
- alert: OutOfMemory
expr: (node_memory_MemFree_bytes + node_memory_Cached_bytes + node_memory_Buffers_bytes) / node_memory_MemTotal_bytes * 100 < 10
for: 15m
labels:
severity: critique
annotations:
identifier: "{{ $labels.instance }}"
summary: "Out of memory (instance {{ $labels.instance }})"
description: "<!channel> L'hôte n'a presque plus de RAM (< 10% restant) VALUE = {{ $value }} LABELS: {{ $labels.job }} : {{ $labels.instance }}"
- alert: UnusualNetworkThroughputIn
expr: sum by (instance) (irate(node_network_receive_bytes_total[2m])) / 1024 / 1024 > 100
for: 15m
labels:
severity: critique
annotations:
identifier: "{{ $labels.instance }}"
summary: "Unusual network throughput in (instance {{ $labels.instance }})"
description: "<!channel> Les interfaces réseau reçoivent sans doute trop de données (> 100 MB/s) VALUE = {{ $value }} LABELS: {{ $labels.job }} : {{ $labels.instance }}"
- alert: UnusualNetworkThroughputOut
expr: sum by (instance) (irate(node_network_transmit_bytes_total[2m])) / 1024 / 1024 > 100
for: 15m
labels:
severity: critique
annotations:
identifier: "{{ $labels.instance }}"
summary: "Unusual network throughput out (instance {{ $labels.instance }})"
description: "<!channel> Les interfaces réseau envoient sans doute trop de données (> 100 MB/s) VALUE = {{ $value }} LABELS: {{ $labels.job }} : {{ $labels.instance }}"
- alert: UnusualDiskReadRate
expr: sum by (instance) (irate(node_disk_read_bytes_total[2m])) / 1024 / 1024 > 50
for: 15m
labels:
severity: critique
annotations:
identifier: "{{ $labels.instance }}"
summary: "Unusual disk read rate (instance {{ $labels.instance }})"
description: "<!channel> Le disque lit sans doute trop de données (> 50 MB/s) VALUE = {{ $value }} LABELS: {{ $labels.job }} : {{ $labels.instance }}"
- alert: UnusualDiskWriteRate
expr: sum by (instance) (irate(node_disk_written_bytes_total[2m])) / 1024 / 1024 > 50
for: 15m
labels:
severity: critique
annotations:
identifier: "{{ $labels.instance }}"
summary: "Unusual disk write rate (instance {{ $labels.instance }})"
description: "<!channel> Le disque écrit sans doute trop de données (> 50 MB/s) VALUE = {{ $value }} LABELS: {{ $labels.job }} : {{ $labels.instance }}"
- alert: OutOfDiskSpace
expr: node_filesystem_free_bytes{mountpoint ="/"} / node_filesystem_size_bytes{mountpoint ="/"} * 100 < 20
for: 15m
labels:
severity: critique
annotations:
identifier: "{{ $labels.instance }}"
summary: "Out of disk space (instance {{ $labels.instance }})"
description: "<!channel> L'espace disque est presque complet (< 20% restant) VALUE = {{ $value }} LABELS: {{ $labels.job }} : {{ $labels.instance }}"
- alert: UnusualDiskReadLatency
expr: rate(node_disk_read_time_seconds_total[1m]) / rate(node_disk_reads_completed_total[1m]) > 100
for: 15m
labels:
severity: critique
annotations:
identifier: "{{ $labels.instance }}"
summary: "Unusual disk read latency (instance {{ $labels.instance }})"
description: "<!channel> La latence du disque augmente (read operations > 100ms) VALUE = {{ $value }} LABELS: {{ $labels.job }} : {{ $labels.instance }}"
- alert: CpuLoad
expr: node_load15 / (count without (cpu, mode) (node_cpu_seconds_total{mode="system"})) > 2
for: 15m
labels:
severity: critique
annotations:
identifier: "{{ $labels.instance }}"
summary: "CPU load (instance {{ $labels.instance }})"
description: "<!channel> La charge CPU (15m) est élevée VALUE = {{ $value }} LABELS: {{ $labels.job }} : {{ $labels.instance }}"
- alert: ContextSwitching
expr: rate(node_context_switches_total[5m]) > ((count without (cpu, mode) (node_cpu_seconds_total{mode="system"})) * 1500)
for: 15m
labels:
severity: critique
annotations:
identifier: "{{ $labels.instance }}"
summary: "Context switching (instance {{ $labels.instance }})"
description: "<!channel> Le contexte switch augement sur l'hôte VALUE = {{ $value }} LABELS: {{ $labels.job }} : {{ $labels.instance }}"
- alert: Health endpoint down
expr: probe_success == 0
for: 10s
labels:
severity: critique
annotations:
identifier: "{{ $labels.instance }}"
summary: "Health endpoint is down"
description: "<!channel> L'URL ne répond pas : {{ $labels.addresse }}"
- alert: Certificate exprire
expr: probe_ssl_earliest_cert_expiry{job="blackbox"} - time() < 86400 * 30
for: 10m
labels:
severity: critique
annotations:
identifier: "{{ $labels.instance }}"
summary: "SSL certificate expire"
description: "<!channel> Le certificat SSL exprire dans 3 mois {{ $labels.addresse }}"
+20
View File
@@ -0,0 +1,20 @@
global:
resolve_timeout: 5m
route:
group_by: ['...']
receiver: slack_general # <-- Si une alerte est soulevée, l'envoyée à slack
receivers:
- name: slack_general
slack_configs:
- api_url: https://hooks.slack.com/services/<VOTRE WEBHOOK SLACK> # <-- Pensez à mettre votre URL de webhook slack ici
channel: alert-prod # <-- Penser à mettre le bon channel ici
icon_emoji: ":rotating_light:" # <-- L'emoji de votre choix pour s'afficher dans le channel slack
title_link: "http://127.0.0.1:9090/alerts" # <-- Ici on met l'url d'alertmanage pour reprendre le nom des alertes sur le /alerts
send_resolved: true # <-- Ce booléen nous permet d'envoyer une seconde alerte quand elle est résolue
title: '{{ template "custom_title" . }}' # <-- Reprise du template
text: '{{ template "custom_slack_message" . }}' # <-- Reprise du template
templates:
- '/etc/alertmanager/templates/default.tmpl' # <-- Template en go pour l'alerte slack, vous pouvez à peu près tout faire
@@ -0,0 +1,10 @@
{{ define "custom_title" }}
{{ range .Alerts }}
{{ if eq .Status "firing" }}:broken_heart:{{else}}:green_heart:{{ end }} [{{ .Annotations.identifier }}] {{.Annotations.summary }}
{{end}}
{{ end }}
{{ define "custom_slack_message" }}
{{ range .Alerts }}
{{ .Annotations.description }}
{{end}}
{{end}}
+12
View File
@@ -0,0 +1,12 @@
apiVersion: 1
providers:
- name: 'Monitoring'
orgId: 1
folder: ''
type: file
disableDeletion: false
updateIntervalSeconds: 10 #how often Grafana will scan for changed dashboards
options:
path: /var/lib/grafana/dashboards
+770
View File
@@ -0,0 +1,770 @@
{
"__inputs": [
{
"name": "DS_PROMETHEUS",
"label": "DS_PROMETHEUS",
"description": "",
"type": "datasource",
"pluginId": "prometheus",
"pluginName": "Prometheus"
}
],
"__requires": [
{
"type": "grafana",
"id": "grafana",
"name": "Grafana",
"version": "7.5.2"
},
{
"type": "panel",
"id": "graph",
"name": "Graph",
"version": ""
},
{
"type": "datasource",
"id": "prometheus",
"name": "Prometheus",
"version": "2.0.0"
}
],
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": "-- Grafana --",
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"type": "dashboard"
}
]
},
"description": "Basic celery monitoring example",
"editable": true,
"gnetId": null,
"graphTooltip": 0,
"id": null,
"links": [],
"panels": [
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "${DS_PROMETHEUS}",
"description": "This panel shows status of celery workers. 1 = online, 0 = offline.",
"fieldConfig": {
"defaults": {},
"overrides": []
},
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 0
},
"hiddenSeries": false,
"id": 4,
"legend": {
"avg": false,
"current": false,
"max": false,
"min": false,
"show": true,
"total": false,
"values": false
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"alertThreshold": true
},
"percentage": false,
"pluginVersion": "7.5.2",
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"exemplar": true,
"expr": "flower_worker_online",
"interval": "",
"legendFormat": "{{ worker }}",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "Celery Worker Status",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"$$hashKey": "object:150",
"format": "short",
"label": "",
"logBase": 1,
"max": "1",
"min": "0",
"show": true
},
{
"$$hashKey": "object:151",
"decimals": null,
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": false
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "${DS_PROMETHEUS}",
"description": "This panel shows number of tasks currently executing at worker.",
"fieldConfig": {
"defaults": {},
"overrides": []
},
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 0
},
"hiddenSeries": false,
"id": 9,
"legend": {
"alignAsTable": true,
"avg": true,
"current": true,
"max": true,
"min": true,
"show": true,
"total": false,
"values": true
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"alertThreshold": true
},
"percentage": false,
"pluginVersion": "7.5.2",
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"exemplar": true,
"expr": "flower_worker_number_of_currently_executing_tasks",
"interval": "",
"legendFormat": "{{worker}}",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "Number of Tasks Currently Executing at Worker",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"$$hashKey": "object:79",
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"$$hashKey": "object:80",
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": false
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "${DS_PROMETHEUS}",
"description": "This panel shows average task runtime at worker by worker and task name.",
"fieldConfig": {
"defaults": {},
"overrides": []
},
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 9,
"w": 24,
"x": 0,
"y": 8
},
"hiddenSeries": false,
"id": 11,
"legend": {
"alignAsTable": true,
"avg": true,
"current": true,
"max": true,
"min": true,
"show": true,
"total": false,
"values": true
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"alertThreshold": true
},
"percentage": false,
"pluginVersion": "7.5.2",
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"exemplar": true,
"expr": "rate(flower_task_runtime_seconds_sum[5m]) / rate(flower_task_runtime_seconds_count[5m])",
"interval": "",
"legendFormat": "{{task}}, {{worker}}",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "Average Task Runtime at Worker",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"$$hashKey": "object:337",
"format": "s",
"label": "",
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"$$hashKey": "object:338",
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": false
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "${DS_PROMETHEUS}",
"description": "This panel shows task prefetch time at worker by worker and task name.",
"fieldConfig": {
"defaults": {},
"overrides": []
},
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 9,
"w": 24,
"x": 0,
"y": 17
},
"hiddenSeries": false,
"id": 12,
"legend": {
"alignAsTable": true,
"avg": true,
"current": true,
"max": true,
"min": true,
"show": true,
"total": false,
"values": true
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"alertThreshold": true
},
"percentage": false,
"pluginVersion": "7.5.2",
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"exemplar": true,
"expr": "flower_task_prefetch_time_seconds",
"interval": "",
"legendFormat": "{{task}}, {{worker}}",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "Task Prefetch Time at Worker",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"$$hashKey": "object:337",
"format": "s",
"label": "",
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"$$hashKey": "object:338",
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": false
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "${DS_PROMETHEUS}",
"description": "This panel shows number of tasks prefetched at worker by task and worker name.",
"fieldConfig": {
"defaults": {},
"overrides": []
},
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 9,
"w": 24,
"x": 0,
"y": 26
},
"hiddenSeries": false,
"id": 10,
"legend": {
"alignAsTable": true,
"avg": true,
"current": true,
"max": true,
"min": true,
"show": true,
"total": false,
"values": true
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"alertThreshold": true
},
"percentage": false,
"pluginVersion": "7.5.2",
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"exemplar": true,
"expr": "flower_worker_prefetched_tasks",
"interval": "",
"legendFormat": "{{task}}, {{worker}}",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "Number of Tasks Prefetched At Worker",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"$$hashKey": "object:337",
"format": "short",
"label": "",
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"$$hashKey": "object:338",
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": false
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "${DS_PROMETHEUS}",
"description": "This panel presents average task success ratio over time by task name.",
"fieldConfig": {
"defaults": {},
"overrides": []
},
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 7,
"w": 12,
"x": 0,
"y": 35
},
"hiddenSeries": false,
"id": 2,
"legend": {
"alignAsTable": true,
"avg": false,
"current": true,
"max": true,
"min": true,
"show": true,
"total": false,
"values": true
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"alertThreshold": true
},
"percentage": false,
"pluginVersion": "7.5.2",
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"exemplar": true,
"expr": "(sum(avg_over_time(flower_events_total{type=\"task-succeeded\"}[15m])) by (task) / sum(avg_over_time(flower_events_total{type=~\"task-failed|task-succeeded\"}[15m])) by (task)) * 100",
"interval": "",
"legendFormat": "{{ task }}",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "Task Success Ratio",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"$$hashKey": "object:63",
"format": "percent",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"$$hashKey": "object:64",
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": false
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
},
{
"aliasColors": {},
"bars": false,
"dashLength": 10,
"dashes": false,
"datasource": "${DS_PROMETHEUS}",
"description": "This panel presents average task failure ratio over time by task name.",
"fieldConfig": {
"defaults": {},
"overrides": []
},
"fill": 1,
"fillGradient": 0,
"gridPos": {
"h": 7,
"w": 12,
"x": 12,
"y": 35
},
"hiddenSeries": false,
"id": 7,
"legend": {
"alignAsTable": true,
"avg": false,
"current": true,
"max": true,
"min": true,
"show": true,
"total": false,
"values": true
},
"lines": true,
"linewidth": 1,
"nullPointMode": "null",
"options": {
"alertThreshold": true
},
"percentage": false,
"pluginVersion": "7.5.2",
"pointradius": 2,
"points": false,
"renderer": "flot",
"seriesOverrides": [],
"spaceLength": 10,
"stack": false,
"steppedLine": false,
"targets": [
{
"exemplar": true,
"expr": "(sum(avg_over_time(flower_events_total{type=\"task-failed\"}[15m])) by (task) / sum(avg_over_time(flower_events_total{type=~\"task-failed|task-succeeded\"}[15m])) by (task)) * 100",
"interval": "",
"legendFormat": "{{ task }}",
"refId": "A"
}
],
"thresholds": [],
"timeFrom": null,
"timeRegions": [],
"timeShift": null,
"title": "Task Failure Ratio",
"tooltip": {
"shared": true,
"sort": 0,
"value_type": "individual"
},
"type": "graph",
"xaxis": {
"buckets": null,
"mode": "time",
"name": null,
"show": true,
"values": []
},
"yaxes": [
{
"$$hashKey": "object:63",
"format": "percent",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": true
},
{
"$$hashKey": "object:64",
"format": "short",
"label": null,
"logBase": 1,
"max": null,
"min": null,
"show": false
}
],
"yaxis": {
"align": false,
"alignLevel": null
}
}
],
"refresh": "10s",
"schemaVersion": 27,
"style": "dark",
"tags": [
"celery",
"monitoring",
"flower"
],
"templating": {
"list": [
{
"hide": 0,
"label": "datasource",
"name": "DS_PROMETHEUS",
"options": [],
"query": "prometheus",
"refresh": 1,
"regex": "",
"type": "datasource"
}
]
},
"time": {
"from": "now-15m",
"to": "now"
},
"timepicker": {},
"timezone": "",
"title": "Flower",
"uid": "3OBI1flGz",
"version": 9
}
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+50
View File
@@ -0,0 +1,50 @@
# config file version
apiVersion: 1
# list of datasources that should be deleted from the database
deleteDatasources:
- name: Prometheus
orgId: 1
# list of datasources to insert/update depending
# whats available in the database
datasources:
# <string, required> name of the datasource. Required
- name: Prometheus
# <string, required> datasource type. Required
type: prometheus
# <string, required> access mode. direct or proxy. Required
access: proxy
# <int> org id. will default to orgId 1 if not specified
orgId: 1
# <string> url
url: http://prometheus:9090
# <string> database password, if used
password:
# <string> database user, if used
user:
# <string> database name, if used
database:
# <bool> enable/disable basic auth
basicAuth: false
# <string> basic auth username, if used
basicAuthUser:
# <string> basic auth password, if used
basicAuthPassword:
# <bool> enable/disable with credentials headers
withCredentials:
# <bool> mark as default datasource. Max one per org
isDefault: true
# <map> fields that will be converted to json and stored in json_data
jsonData:
graphiteVersion: "1.1"
tlsAuth: false
tlsAuthWithCACert: false
# <string> json object of data that will be encrypted.
secureJsonData:
tlsCACert: "..."
tlsClientCert: "..."
tlsClientKey: "..."
version: 1
# <bool> allow users to edit datasources from the UI.
editable: true
+486
View File
@@ -0,0 +1,486 @@
##################### Grafana Configuration Example #####################
#
# Everything has defaults so you only need to uncomment things you want to
# change
# possible values : production, development
;app_mode = production
# instance name, defaults to HOSTNAME environment variable value or hostname if HOSTNAME var is empty
;instance_name = ${HOSTNAME}
#################################### Paths ####################################
[paths]
# Path to where grafana can store temp files, sessions, and the sqlite3 db (if that is used)
;data = /var/lib/grafana
# Temporary files in `data` directory older than given duration will be removed
;temp_data_lifetime = 24h
# Directory where grafana can store logs
;logs = /var/log/grafana
# Directory where grafana will automatically scan and look for plugins
;plugins = /var/lib/grafana/plugins
# folder that contains provisioning config files that grafana will apply on startup and while running.
;provisioning = /etc/grafana/provisioning
#################################### Server ####################################
[server]
# Protocol (http, https, socket)
;protocol = http
# The ip address to bind to, empty will bind to all interfaces
;http_addr =
# The http port to use
;http_port = 3000
# The public facing domain name used to access grafana from a browser
;domain =
# Redirect to correct domain if host header does not match domain
# Prevents DNS rebinding attacks
;enforce_domain = false
# The full public facing url you use in browser, used for redirects and emails
# If you use reverse proxy and sub path specify full url (with sub path)
;root_url =
# Log web requests
;router_logging = false
# the path relative working path
;static_root_path = public
# enable gzip
;enable_gzip = false
# https certs & key file
;cert_file =
;cert_key =
# Unix socket path
;socket =
#################################### Database ####################################
[database]
# You can configure the database connection by specifying type, host, name, user and password
# as separate properties or as on string using the url properties.
# Either "mysql", "postgres" or "sqlite3", it's your choice
;type = sqlite3
;host = 127.0.0.1:3306
;name = grafana
;user = root
# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;"""
;password =
# Use either URL or the previous fields to configure the database
# Example: mysql://user:secret@host:port/database
;url =
# For "postgres" only, either "disable", "require" or "verify-full"
;ssl_mode = disable
# For "sqlite3" only, path relative to data_path setting
;path = grafana.db
# Max idle conn setting default is 2
;max_idle_conn = 2
# Max conn setting default is 0 (mean not set)
;max_open_conn =
# Connection Max Lifetime default is 14400 (means 14400 seconds or 4 hours)
;conn_max_lifetime = 14400
# Set to true to log the sql calls and execution times.
log_queries =
#################################### Session ####################################
[session]
# Either "memory", "file", "redis", "mysql", "postgres", default is "file"
;provider = file
# Provider config options
# memory: not have any config yet
# file: session dir path, is relative to grafana data_path
# redis: config like redis server e.g. `addr=127.0.0.1:6379,pool_size=100,db=grafana`
# mysql: go-sql-driver/mysql dsn config string, e.g. `user:password@tcp(127.0.0.1:3306)/database_name`
# postgres: user=a password=b host=localhost port=5432 dbname=c sslmode=disable
;provider_config = sessions
# Session cookie name
;cookie_name = grafana_sess
# If you use session in https only, default is false
;cookie_secure = false
# Session life time, default is 86400
;session_life_time = 86400
#################################### Data proxy ###########################
[dataproxy]
# This enables data proxy logging, default is false
;logging = false
#################################### Analytics ####################################
[analytics]
# Server reporting, sends usage counters to stats.grafana.org every 24 hours.
# No ip addresses are being tracked, only simple counters to track
# running instances, dashboard and error counts. It is very helpful to us.
# Change this option to false to disable reporting.
;reporting_enabled = true
# Set to false to disable all checks to https://grafana.net
# for new vesions (grafana itself and plugins), check is used
# in some UI views to notify that grafana or plugin update exists
# This option does not cause any auto updates, nor send any information
# only a GET request to http://grafana.com to get latest versions
;check_for_updates = true
# Google Analytics universal tracking code, only enabled if you specify an id here
;google_analytics_ua_id =
#################################### Security ####################################
[security]
# default admin user, created on startup
admin_user = admin
# default admin password, can be changed before first start of grafana, or in profile settings
admin_password = admin
# used for signing
;secret_key = SW2YcwTIb9zpOOhoPsMm
# Auto-login remember days
;login_remember_days = 7
;cookie_username = grafana_user
;cookie_remember_name = grafana_remember
# disable gravatar profile images
;disable_gravatar = false
# data source proxy whitelist (ip_or_domain:port separated by spaces)
;data_source_proxy_whitelist =
# disable protection against brute force login attempts
;disable_brute_force_login_protection = false
#################################### Snapshots ###########################
[snapshots]
# snapshot sharing options
;external_enabled = true
;external_snapshot_url = https://snapshots-origin.raintank.io
;external_snapshot_name = Publish to snapshot.raintank.io
# remove expired snapshot
;snapshot_remove_expired = true
#################################### Dashboards History ##################
[dashboards]
# Number dashboard versions to keep (per dashboard). Default: 20, Minimum: 1
;versions_to_keep = 20
#################################### Users ###############################
[users]
# disable user signup / registration
;allow_sign_up = true
# Allow non admin users to create organizations
;allow_org_create = true
# Set to true to automatically assign new users to the default organization (id 1)
;auto_assign_org = true
# Default role new users will be automatically assigned (if disabled above is set to true)
;auto_assign_org_role = Viewer
# Background text for the user field on the login page
;login_hint = email or username
# Default UI theme ("dark" or "light")
;default_theme = dark
# External user management, these options affect the organization users view
;external_manage_link_url =
;external_manage_link_name =
;external_manage_info =
# Viewers can edit/inspect dashboard settings in the browser. But not save the dashboard.
;viewers_can_edit = false
[auth]
# Set to true to disable (hide) the login form, useful if you use OAuth, defaults to false
;disable_login_form = false
# Set to true to disable the signout link in the side menu. useful if you use auth.proxy, defaults to false
;disable_signout_menu = false
# URL to redirect the user to after sign out
;signout_redirect_url =
# Set to true to attempt login with OAuth automatically, skipping the login screen.
# This setting is ignored if multiple OAuth providers are configured.
;oauth_auto_login = false
#################################### Anonymous Auth ##########################
[auth.anonymous]
# enable anonymous access
;enabled = false
# specify organization name that should be used for unauthenticated users
;org_name = Main Org.
# specify role for unauthenticated users
;org_role = Viewer
#################################### Github Auth ##########################
[auth.github]
;enabled = false
;allow_sign_up = true
;client_id = some_id
;client_secret = some_secret
;scopes = user:email,read:org
;auth_url = https://github.com/login/oauth/authorize
;token_url = https://github.com/login/oauth/access_token
;api_url = https://api.github.com/user
;team_ids =
;allowed_organizations =
#################################### Google Auth ##########################
[auth.google]
# enabled = true
# allow_sign_up = true
# client_id =
# client_secret =
# scopes = https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email
# auth_url = https://accounts.google.com/o/oauth2/auth
# token_url = https://accounts.google.com/o/oauth2/token
# api_url = https://www.googleapis.com/oauth2/v1/userinfo
;allowed_domains =
#################################### Generic OAuth ##########################
[auth.generic_oauth]
;enabled = false
;name = OAuth
;allow_sign_up = true
;client_id = some_id
;client_secret = some_secret
;scopes = user:email,read:org
;auth_url = https://foo.bar/login/oauth/authorize
;token_url = https://foo.bar/login/oauth/access_token
;api_url = https://foo.bar/user
;team_ids =
;allowed_organizations =
;tls_skip_verify_insecure = false
;tls_client_cert =
;tls_client_key =
;tls_client_ca =
#################################### Grafana.com Auth ####################
[auth.grafana_com]
;enabled = false
;allow_sign_up = true
;client_id = some_id
;client_secret = some_secret
;scopes = user:email
;allowed_organizations =
#################################### Auth Proxy ##########################
[auth.proxy]
;enabled = false
;header_name = X-WEBAUTH-USER
;header_property = username
;auto_sign_up = true
;ldap_sync_ttl = 60
;whitelist = 192.168.1.1, 192.168.2.1
;headers = Email:X-User-Email, Name:X-User-Name
#################################### Basic Auth ##########################
[auth.basic]
;enabled = true
#################################### Auth LDAP ##########################
[auth.ldap]
;enabled = false
;config_file = /etc/grafana/ldap.toml
;allow_sign_up = true
#################################### SMTP / Emailing ##########################
[smtp]
;enabled = true
;host =
;user =
# If the password contains # or ; you have to wrap it with trippel quotes. Ex """#password;"""
;password = ""
;cert_file =
;key_file =
;skip_verify = true
;from_address =
;from_name =
# EHLO identity in SMTP dialog (defaults to instance_name)
;ehlo_identity = dashboard.example.com
[emails]
;welcome_email_on_sign_up = false
#################################### Logging ##########################
[log]
# Either "console", "file", "syslog". Default is console and file
# Use space to separate multiple modes, e.g. "console file"
;mode = console file
# Either "debug", "info", "warn", "error", "critical", default is "info"
;level = info
# optional settings to set different levels for specific loggers. Ex filters = sqlstore:debug
;filters =
# For "console" mode only
[log.console]
;level =
# log line format, valid options are text, console and json
;format = console
# For "file" mode only
[log.file]
;level =
# log line format, valid options are text, console and json
;format = text
# This enables automated log rotate(switch of following options), default is true
;log_rotate = true
# Max line number of single file, default is 1000000
;max_lines = 1000000
# Max size shift of single file, default is 28 means 1 << 28, 256MB
;max_size_shift = 28
# Segment log daily, default is true
;daily_rotate = true
# Expired days of log file(delete after max days), default is 7
;max_days = 7
[log.syslog]
;level =
# log line format, valid options are text, console and json
;format = text
# Syslog network type and address. This can be udp, tcp, or unix. If left blank, the default unix endpoints will be used.
;network =
;address =
# Syslog facility. user, daemon and local0 through local7 are valid.
;facility =
# Syslog tag. By default, the process' argv[0] is used.
;tag =
#################################### Alerting ############################
[alerting]
# Disable alerting engine & UI features
;enabled = true
# Makes it possible to turn off alert rule execution but alerting UI is visible
;execute_alerts = true
# Default setting for new alert rules. Defaults to categorize error and timeouts as alerting. (alerting, keep_state)
;error_or_timeout = alerting
# Default setting for how Grafana handles nodata or null values in alerting. (alerting, no_data, keep_state, ok)
;nodata_or_nullvalues = no_data
# Alert notifications can include images, but rendering many images at the same time can overload the server
# This limit will protect the server from render overloading and make sure notifications are sent out quickly
;concurrent_render_limit = 5
#################################### Explore #############################
[explore]
# Enable the Explore section
;enabled = false
#################################### Internal Grafana Metrics ##########################
# Metrics available at HTTP API Url /metrics
[metrics]
# Disable / Enable internal metrics
;enabled = true
# Publish interval
;interval_seconds = 10
# Send internal metrics to Graphite
[metrics.graphite]
# Enable by setting the address setting (ex localhost:2003)
;address =
;prefix = prod.grafana.%(instance_name)s.
#################################### Distributed tracing ############
[tracing.jaeger]
# Enable by setting the address sending traces to jaeger (ex localhost:6831)
;address = localhost:6831
# Tag that will always be included in when creating new spans. ex (tag1:value1,tag2:value2)
;always_included_tag = tag1:value1
# Type specifies the type of the sampler: const, probabilistic, rateLimiting, or remote
;sampler_type = const
# jaeger samplerconfig param
# for "const" sampler, 0 or 1 for always false/true respectively
# for "probabilistic" sampler, a probability between 0 and 1
# for "rateLimiting" sampler, the number of spans per second
# for "remote" sampler, param is the same as for "probabilistic"
# and indicates the initial sampling rate before the actual one
# is received from the mothership
;sampler_param = 1
#################################### Grafana.com integration ##########################
# Url used to import dashboards directly from Grafana.com
[grafana_com]
;url = https://grafana.com
#################################### External image storage ##########################
[external_image_storage]
# Used for uploading images to public servers so they can be included in slack/email messages.
# you can choose between (s3, webdav, gcs, azure_blob, local)
;provider =
[external_image_storage.s3]
;bucket =
;region =
;path =
;access_key =
;secret_key =
[external_image_storage.webdav]
;url =
;public_url =
;username =
;password =
[external_image_storage.gcs]
;key_file =
;bucket =
;path =
[external_image_storage.azure_blob]
;account_name =
;account_key =
;container_name =
[external_image_storage.local]
# does not require any configuration
[rendering]
# Options to configure external image rendering server like https://github.com/grafana/grafana-image-renderer
;server_url =
;callback_url =
[enterprise]
# Path to a valid Grafana Enterprise license.jwt file
;license_path =
+154
View File
@@ -0,0 +1,154 @@
-- Source unique de creation des tables de la base booksync.
CREATE TABLE IF NOT EXISTS "AUTHORS" (
id VARCHAR(36) NOT NULL,
name VARCHAR(255) NOT NULL,
first_name VARCHAR(255),
tasks_count INTEGER NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE IF NOT EXISTS "JOBS" (
id VARCHAR(36) NOT NULL,
title VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE IF NOT EXISTS "KINDS" (
id VARCHAR(36) NOT NULL,
name VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE IF NOT EXISTS "PUBLISHERS" (
id VARCHAR(36) NOT NULL,
title VARCHAR(500) NOT NULL,
closed BOOLEAN NOT NULL,
editions_count INTEGER NOT NULL,
no_amazon BOOLEAN NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE IF NOT EXISTS "SERIES_TYPES" (
id VARCHAR(36) NOT NULL,
title VARCHAR(255) NOT NULL,
to_display BOOLEAN,
PRIMARY KEY (id)
);
CREATE TABLE IF NOT EXISTS "BOX_EDITIONS" (
id VARCHAR(36) NOT NULL,
title VARCHAR(500) NOT NULL,
publisher_id VARCHAR(36) NOT NULL,
boxes_count INTEGER NOT NULL,
adult_content BOOLEAN NOT NULL,
box_follow_editions_count INTEGER NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY(publisher_id) REFERENCES "PUBLISHERS" (id)
);
CREATE TABLE IF NOT EXISTS "SERIES" (
id VARCHAR(36) NOT NULL,
title VARCHAR(500) NOT NULL,
type_id VARCHAR(36),
adult_content BOOLEAN,
editions_count INTEGER,
tasks_count INTEGER,
PRIMARY KEY (id),
FOREIGN KEY(type_id) REFERENCES "SERIES_TYPES" (id)
);
CREATE TABLE IF NOT EXISTS "BOXES" (
id VARCHAR(36) NOT NULL,
title VARCHAR(500) NOT NULL,
number INTEGER NOT NULL,
release_date DATE,
isbn VARCHAR(32),
asin VARCHAR(32),
commercial_stop BOOLEAN NOT NULL,
box_edition_id VARCHAR(36) NOT NULL,
box_possessions_count INTEGER NOT NULL,
image_url TEXT,
content TEXT,
PRIMARY KEY (id),
FOREIGN KEY(box_edition_id) REFERENCES "BOX_EDITIONS" (id)
);
CREATE TABLE IF NOT EXISTS "EDITIONS" (
id VARCHAR(36) NOT NULL,
title VARCHAR(500),
series_id VARCHAR(36) NOT NULL,
publisher_id VARCHAR(36) NOT NULL,
parent_edition_id VARCHAR(36),
volumes_count INTEGER NOT NULL,
last_volume_number INTEGER,
commercial_stop BOOLEAN NOT NULL,
not_finished BOOLEAN NOT NULL,
follow_editions_count INTEGER NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY(series_id) REFERENCES "SERIES" (id),
FOREIGN KEY(publisher_id) REFERENCES "PUBLISHERS" (id),
FOREIGN KEY(parent_edition_id) REFERENCES "EDITIONS" (id)
);
CREATE TABLE IF NOT EXISTS "SERIES_KINDS" (
series_id VARCHAR(36) NOT NULL,
kind_id VARCHAR(36) NOT NULL,
PRIMARY KEY (series_id, kind_id),
FOREIGN KEY(series_id) REFERENCES "SERIES" (id) ON DELETE CASCADE,
FOREIGN KEY(kind_id) REFERENCES "KINDS" (id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS "TASKS" (
id VARCHAR(36) NOT NULL,
series_id VARCHAR(36) NOT NULL,
author_id VARCHAR(36),
job_id VARCHAR(36),
PRIMARY KEY (id),
FOREIGN KEY(series_id) REFERENCES "SERIES" (id),
FOREIGN KEY(author_id) REFERENCES "AUTHORS" (id),
FOREIGN KEY(job_id) REFERENCES "JOBS" (id)
);
CREATE TABLE IF NOT EXISTS "VOLUMES" (
id VARCHAR(36) NOT NULL,
title VARCHAR(500),
number INTEGER NOT NULL,
release_date DATE,
isbn VARCHAR(32),
asin VARCHAR(32),
edition_id VARCHAR(36) NOT NULL,
possessions_count INTEGER NOT NULL,
not_sold BOOLEAN NOT NULL,
image_url TEXT,
nb_pages INTEGER,
content TEXT,
PRIMARY KEY (id),
FOREIGN KEY(edition_id) REFERENCES "EDITIONS" (id)
);
CREATE TABLE IF NOT EXISTS "BOX_VOLUMES" (
id VARCHAR(36) NOT NULL,
box_id VARCHAR(36) NOT NULL,
volume_id VARCHAR(36) NOT NULL,
included BOOLEAN NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY(box_id) REFERENCES "BOXES" (id),
FOREIGN KEY(volume_id) REFERENCES "VOLUMES" (id)
);
CREATE TABLE IF NOT EXISTS "VOLUME_POSSESSION_HISTORY" (
id_volume VARCHAR(36) NOT NULL,
observed_at TIMESTAMP WITH TIME ZONE NOT NULL,
possessions_count INTEGER NOT NULL,
PRIMARY KEY (id_volume, observed_at),
FOREIGN KEY(id_volume) REFERENCES "VOLUMES" (id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS "BOX_POSSESSION_HISTORY" (
id_box VARCHAR(36) NOT NULL,
observed_at TIMESTAMP WITH TIME ZONE NOT NULL,
box_possessions_count INTEGER NOT NULL,
PRIMARY KEY (id_box, observed_at),
FOREIGN KEY(id_box) REFERENCES "BOXES" (id) ON DELETE CASCADE
);
+57
View File
@@ -0,0 +1,57 @@
# my global config
global:
scrape_interval: 5s # By default, scrape targets every 15 seconds.
evaluation_interval: 5s # By default, scrape targets every 15 seconds.
# scrape_timeout is set to the global default (10s).
# Attach these labels to any time series or alerts when communicating with
# external systems (federation, remote storage, Alertmanager).
external_labels:
env: 'infrastructure' # C'est simplement le nom de votre environnement
# spécification du serveur alertmanager
alerting:
alertmanagers:
- static_configs:
- targets:
- alertmanager:9093
scheme: http
timeout: 10s
# fichier de règles pour l'alerting, c'est dans ce fichier que sont les définitions des alertes
rule_files:
- '/alertmanager/alert.rules/alerts.rules.yml'
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['prometheus:9090']
- job_name: 'node-exporter'
scrape_interval: 5s
static_configs:
- targets: ['node-exporter:9100']
- job_name: 'postgres-exporter'
scrape_interval: 300s
scrape_timeout: 60s
static_configs:
- targets: ['postgres-exporter:9187']
- job_name: 'rabbitmq'
metrics_path: /metrics/per-object
static_configs:
- targets: ['rabbitmq:15692']
- job_name: 'redis-exporter'
static_configs:
- targets: ['redis-exporter:9121']
- job_name: 'flower'
static_configs:
- targets: ['flower:5555']
- job_name: 'booksync-api'
static_configs:
- targets: ['booksync-api:5000']