Grafana basic auth
В ролях:
- grafana stable chart
- nginx ingress controller
- terraform
Задача:
Сделать basic auth для графаны на уровне nginx, передавая username в grafana, так чтобы переданное имя использовалось как пользователь в grafana и запихнуть всё это в терраформ.
Решение: (выписка из values.yaml)
Содержимое файла basic_auth.txt заполняется так:
#grafana #kubernetes #nginx #ingress #terraform
В ролях:
- grafana stable chart
- nginx ingress controller
- terraform
Задача:
Сделать basic auth для графаны на уровне nginx, передавая username в grafana, так чтобы переданное имя использовалось как пользователь в grafana и запихнуть всё это в терраформ.
Решение: (выписка из values.yaml)
ingress:где переменные в main.tf принимают такие значения:
enabled: true
annotations:
'kubernetes.io/ingress.class': ${var.controller_ingress_class}
'nginx.ingress.kubernetes.io/auth-type': ${var.auth-type}
'nginx.ingress.kubernetes.io/auth-secret': ${var.basic_auth_secret_name}
'nginx.ingress.kubernetes.io/auth-realm': ${var.auth-realm}
'nginx.ingress.kubernetes.io/configuration-snippet': |
proxy_set_header X-Remote-User $remote_user;
....
grafana.ini:
users:
allow_sign_up: false
allow_org_create: false
auth:
disable_login_form: true
auth.proxy:
enabled: true
header_name: X-Remote-User
header_property: username
auto_sign_up: true
auth-type = "basic"
auth-secret = "nginx-ingress-auth"
auth-realm = "Authentication Required - OK"
basic_auth_secret = "${file("basic_auth.txt")}"
Содержимое файла basic_auth.txt заполняется так:
htpasswd -nb username long_long_password > basic_auth.txt
#grafana #kubernetes #nginx #ingress #terraform
Prometheus + kubernetes
Полезный набор дашбордов в графану по мониторингу ресурсов в кубе
https://github.com/camilb/prometheus-kubernetes
#grafana #prometheus #kubernetes #monitoring
Полезный набор дашбордов в графану по мониторингу ресурсов в кубе
https://github.com/camilb/prometheus-kubernetes
#grafana #prometheus #kubernetes #monitoring
Очень полезный пост про то как мониторить аномалии
https://about.gitlab.com/blog/2019/07/23/anomaly-detection-using-prometheus/
#grafana #prometheus
https://about.gitlab.com/blog/2019/07/23/anomaly-detection-using-prometheus/
#grafana #prometheus
https://grafana.com/blog/2020/02/25/step-by-step-guide-to-setting-up-prometheus-alertmanager-with-slack-pagerduty-and-gmail/
#grafana #pagerduty
#grafana #pagerduty
Grafana Labs
Step-by-step guide to setting up Prometheus Alertmanager with Slack, PagerDuty, and Gmail | Grafana Labs
Here’s how to get started with Prometheus Alertmanager and set up alert notifications with some popular methods and apps.
Promql, как возвращать 0, если нет данных
Допустим вы складываете значения разных метрик, и в какой-то момент некоторая метрика не имеет данных. Тогда выражение
источник: https://medium.com/@Nklya/promql-how-to-return-0-instead-of-no-data-9e49f7ccb80d
#grafana #prometheus
Допустим вы складываете значения разных метрик, и в какой-то момент некоторая метрика не имеет данных. Тогда выражение
no data + int = no data
и испортит вам всю картину. чтобы такого избежать можно в выражению добавлять такую конструкцию: OR on() vector(0)
. Тогда no data -> 0
и сумма не портит ваши графички в графанеисточник: https://medium.com/@Nklya/promql-how-to-return-0-instead-of-no-data-9e49f7ccb80d
#grafana #prometheus
Часовые столбики
Появилась задача нарисовать график, который будет показывать по-часовую агрегацию количества событий и сравнивать результат с теми же часами до других дней. В моём примере это -1, -7, -28 т.е. вчера, неделю назад и месяц назад.
Пример событий, для одного из графиков - успешные создания документов. т.е. нужно построить график столбиков (точек), просуммировав события за час и то же самое за вчера и позавчера, а потом наложить результаты друг на друга:
Для этого подключаем в качестве datasource вашу постгрю, указав специально созданного пользователя, которому нужно выдать select на необходимую таблицу.
Создаём как обычно дашборд, новый график и выбираем наш датасорс. При написании запроса я переключился в "text edit mode" потому что так сильно удобнее - писать запрос по сути как в саму постгрю. и далее можно создать нужные запросы.
первый запрос вот такой:
А вот 2 и последующие запросы будут чуть интереснее:
Таким образом мы получаем 2 запроса которые получают события за окно наблюдения "сутки" и "прошедшие сутки" и накладывают результат один на другой. повторяем то же самое для -7 и -28 и получаем нужный результат. Все картинки приложу отдельно.
#grafana #postgresql
Появилась задача нарисовать график, который будет показывать по-часовую агрегацию количества событий и сравнивать результат с теми же часами до других дней. В моём примере это -1, -7, -28 т.е. вчера, неделю назад и месяц назад.
Пример событий, для одного из графиков - успешные создания документов. т.е. нужно построить график столбиков (точек), просуммировав события за час и то же самое за вчера и позавчера, а потом наложить результаты друг на друга:
часы - событияДанные в нашем случае хранятся в postgresql, имеют колонку с необходимым статусом и колонку с таймштампом, когда событие случилось. Оказалось, что не прибегая ни к какому прометеусу, sql-exporter'у можно всё это нарисовать.
0 - 10
1 - 24
2 - 13
...
Для этого подключаем в качестве datasource вашу постгрю, указав специально созданного пользователя, которому нужно выдать select на необходимую таблицу.
Создаём как обычно дашборд, новый график и выбираем наш датасорс. При написании запроса я переключился в "text edit mode" потому что так сильно удобнее - писать запрос по сути как в саму постгрю. и далее можно создать нужные запросы.
первый запрос вот такой:
SELECTгде
$__timeGroupAlias(created_at,1h,0),
count(*) AS "0 day"
FROM smtdp_applicant
WHERE
created_at BETWEEN $__timeFrom()::timestamptz and $__timeTo()::timestamptz
and xxxx (наши условия фильтрования событий)
GROUP BY 1
ORDER BY 1
$__timeGroupAlias
- специальная переменная графаны, куда мы передаём имя колонки с таймштампами (created_at) и параметр как мы хотим объединять (1h) - чтобы указать графане как мы хотим сгруппировать получившиеся после запроса value.count(*) AS "0 day"
- высчитываем количество событий и именуем этот результат на графике как "0 day"$__timeFrom()
и $__timeTo()
- специальные переменные графаны в которые подставится таймштамп от масштаба графика. т.е. last 24h разложится на from и to, куда подставится таймштамп времени сколько сейчас и было сутки назад и постгрю полетит запрос xxxx::timestamptz.А вот 2 и последующие запросы будут чуть интереснее:
SELECTгде
$__timeGroupAlias(created_at + interval '24 hours',1h,0),
count(*) AS "-1 day"
FROM smtdp_applicant
WHERE
created_at BETWEEN $__timeFrom()::timestamptz - INTERVAL '1 DAY' and $__timeTo()::timestamptz - INTERVAL '1 DAY'
and xxx
GROUP BY 1
ORDER BY 1
created_at BETWEEN $__timeFrom()::timestamptz - INTERVAL '1 DAY' and $__timeTo()::timestamptz - INTERVAL '1 DAY'
- первая мякотка - мы сделаем запрос от нашего окна наблюдения на сутки влево. timestamptz нужно для того чтобы из этого таймштампа вычесть на уровне постгри сутки, 7 и 28. преобразование типов и всё такое. $__timeGroupAlias(created_at + interval '24 hours',1h,0),
- вторая мякотка. позволяет шифтануть полученный результат на указанный интервал. в нашем случае - на сутки вправо. Таким образом мы получаем 2 запроса которые получают события за окно наблюдения "сутки" и "прошедшие сутки" и накладывают результат один на другой. повторяем то же самое для -7 и -28 и получаем нужный результат. Все картинки приложу отдельно.
#grafana #postgresql