Дополнительные настройки SHM
============================


Настройки уведомлений
---------------------

В данном разделе показан процесс настройки уведомлений при использовании мониторинга SHM.

Достижение параметрами критических значений фиксируется Grafana. Для указания критических значений нужно открыть на редактирование график, например, датасорсов JBoss, затем перейти на вкладку Alert.

.. figure:: ../_static/img/alert1.png

Здесь нужно указать название и интервал пересчёта данных, а также условие, при котором будет срабатывать предупреждение. Условие на картинке означает следующее: уведомлять, если значение метрики в запросе А (available count) за последнюю минуту было ниже 50. Далее указать каналы, по которым будут отправляться уведомления, в данном случае e-mail и Telegram, и сохранить.

.. figure:: ../_static/img/notifications.png


E-mail
~~~~~~

Для настройки уведомлений по e-mail в первую очередь следует настроить smtp для Grafana на PMM-Server. Для этого на машине, где установлен PMM-Server, нужно: 

1. получить ID контейнера

.. code-block:: bash

    root@server:~# docker ps -a
    CONTAINER ID        IMAGE                       COMMAND                CREATED             STATUS              PORTS                           NAMES
    a4c99272241a        percona/pmm-server:latest   "/opt/entrypoint.sh"   2 months ago        Up 7 days           443/tcp, 0.0.0.0:8080->80/tcp   pmm-server
    3e5ea7123736        percona/pmm-server:latest   "/bin/true"            2 months ago        Created                                             pmm-data

2. зайти в контейнер

``docker exec -it a4c99272241a /bin/bash``

3. открыть на редактирование файл 

``vi /etc/grafana/grafana.ini``

4. в секции [smtp] указать настройки почты

.. code-block:: bash

    [smtp]
    enabled = true
    host = smtp.yandex.com:465
    user = alerts@arta.pro
    # If the password contains # or ; you have to wrap it with trippel quotes. Ex """#password;"""
    password = """qwerty!@#"""
    ;cert_file =
    ;key_file =
    skip_verify = true
    from_address = alerts@arta.pro
    from_name = Grafana
    # EHLO identity in SMTP dialog (defaults to instance_name)
    ;ehlo_identity = dashboard.example.com

5. выйти и перезапустить контейнер

``docker restart pmm-server``

После этого нужно открыть в браузере меню Alerting и выбрать Notification Channels, указать название, тип Email и почтовый адрес, на который будут отправляться уведомления: 

.. figure:: ../_static/img/email_alert.png

При достижении настроенным параметром установленного значения на почту будет отправлено подобное сообщение:

.. figure:: ../_static/img/mail_message.png


Telegram
~~~~~~~~

Для уведомлений в Telegram нужно создать telegram-бот, например, через ``@BotFather``. В Telegram нужно отправить этому пользователю следующие сообщения:

#. ``/start``

#. ``/newbot``

#. ввести имя бота, например, ``shm_alerts``

#. ввести юзернейм бота (должен быть уникальным и заканчиваться на _bot), например, ``<your_project_name>_alerts_bot``

В ответ должно прийти сообщение с токеном. После этого нужно открыть меню Alerting и выбрать Notification Channels, указать название, тип Telegram и вставить полученный токен в ``BOT API Token``.

В Telegram отправить боту хотя бы одно сообщение, например, ``/my_id @shm_alerts``. Затем открыть в браузере ``https://api.telegram.org/botYOUR_TOKEN/getUpdates``, подставив свой токен, и скопировать chatID в соответствующее поле.

.. figure:: ../_static/img/telegram_alert.png

При достижении настроенным параметром установленного значения в telegram будет отправлено подобное сообщение:

.. figure:: ../_static/img/telegram_message.png


Отображение на графиках метрик более чем одной ноды
---------------------------------------------------

Большинство графиков в Grafana построены на запросах подобного вида (на примере nginx):

``sum(rate(synergy_http_response_time_seconds_sum[5m])) by (instance) / sum(rate(synergy_http_response_time_seconds_count[5m])) by (instance)``

Суммирование по инстансам позволяет отображать графики нескольких экземпляров какого-либо сервиса одновременно (см. Average Response Times):

.. figure:: ../_static/img/default_graph.png

Соседний график Requests per Second отображает только данные по выбранному инстансу, так как запрос делается по параметрам ``app`` и ``instance``:

``sum(rate(synergy_http_response_time_seconds_count{app=~"$job",instance="$instance"}[1m])) by (instance)`` 

Если нужно показывать на графике оба наблюдаемых сервиса nginx, независимо от выбранного на дашборде, вариантом решения будет дублирование запроса и явное указание инстансов:

.. figure:: ../_static/img/two_nginx.png
