1.1. Установка и настройка¶
Для мониторинга платформы ARTA Synergy используется пакет arta-synergy-health-monitoring
,
разработанный на основе pmm-client
, в сочетании с PMM-Server.
arta-synergy-health-monitoring
предназначен для мониторинга основных
сервисов и инструментов, используемых Synergy: MySQL, JBoss/Wildfly, nginx, Cassandra, Elasticsearch,
а также операционной системы сервера.
Данный пакет содержит набор экспортеров метрик, характеризующих состояние вышеперечисленных сервисов, а также консольный инструмент pmm-admin, позволяющий настроить отправку метрик на сервер мониторинга. Собранные метрики сохраняются в Prometheus, затем при помощи Grafana строятся графики состояний, которые можно просматривать в браузере.
1.1.1. Установка PMM-Server¶
PMM-Server рекомендуется устанавливать на отдельном сервере, операционная система которого поддерживает Docker. Для каждого отслеживаемого узла требуется примерно 1 ГБ памяти на диске при сроке хранения данных, равном одной неделе. Согласно официальной документации, требуемый минимальный объем памяти составляет 2 ГБ для одного отслеживаемого узла, но, когда вы добавляете больше узлов, необходимый объём памяти возрастает нелинейно. Например, данные с 20 узлов должны легко обрабатываться с 16 ГБ памяти.
1.1.1.1. Установка Docker¶
Предварительно следует установить некоторые дополнительные пакеты:
aptitude install apt-transport-https ca-certificates curl software-properties-common
Далее добавить ключ для хранилища Docker:
wget https://download.docker.com/linux/debian/gpg
apt-key add gpg
Затем подключить репозиторий Docker:
echo "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee -a /etc/apt/sources.list.d/docker.list
Обновить список пакетов и установить Docker:
aptitude update
aptitude install docker-ce
После установки запустить и включить Docker для запуска при загрузке:
systemctl start docker
systemctl enable docker
1.1.1.2. Создание контейнеров PMM-Server¶
Для установки собственно PMM-Server’а нужно получить его образ с Docker Hub:
docker pull percona/pmm-server:latest
Затем создать контейнер для обновляемых данных мониторинга:
docker create \
-v /opt/prometheus/data \
-v /opt/consul-data \
-v /var/lib/mysql \
-v /var/lib/grafana \
--name pmm-data \
percona/pmm-server:latest /bin/true
Данная команда делает следующее:
docker create
создаёт контейнер на основе указанного образа;- опция -v инициализирует тома для хранения данных в контейнере;
- опция
--name
задаёт имя для контейнера, в данном случаеpmm-data
; percona/pmm-server:latest
указывает название и версию образа, на основе которого создаётся контейнер.
Примечание
Этот контейнер запускать не нужно, он существует для сохранения данных мониторинга в случае, например, обновления образа PMM-Server. Не удаляйте и не пересоздавайте контейнер, если вы не намереваетесь начать мониторинг сначала, обнулив данные.
Следующая команда создаёт и запускает контейнер PMM-Server:
docker run -d \
-p 8080:80 \
--volumes-from pmm-data \
--name pmm-server \
--restart always \
percona/pmm-server:latest
- опция -d запускает контейнер в фоновом режиме;
- опция -p определяет порт для доступа к PMM-Server через браузер, в примере это порт 8080;
- опция
--volumes-from
примонтирует тома из ранее созданного контейнераpmm-data
; - опция
--name
задаёт имя для контейнера, в данном случаеpmm-server
; - опция
--restart
определяет политику перезапуска контейнера;always
означает, что Docker запустит контейнер при запуске и в случае отключения контейнера. percona/pmm-server:latest
указывает название и версию образа, на основе которого создаётся контейнер.
После этого в браузере по адресу http://host:8080
должна быть доступна стартовая страница
Percona Monitoring and Management:
Более подробные инструкции по работе с PMM-Server можно найти на официальном сайте Percona.
В коробочную версию PMM-Server нужно импортировать необходимые дашборды для мониторинга: JBoss, nginx, Cassandra, Elasticsearch.
Для импорта нужно нажать название текущего дашборда в левом верхнем углу и выбрать пункт Import dashboard:
В открывшемся окне нажать Upload .json File, выбрать нужный дашборд и указать источником данных Prometheus,
затем нажать Import
:
1.1.2. Установка клиента на сервер Synergy¶
Для установки пакета arta-synergy-health-monitoring нужно добавить в /etc/apt/sources.list
следующую строку:
deb [allow-insecure=yes] http://deb.arta.kz/tengri shm main contrib non-free
Затем обновить список пакетов и установить нужный пакет:
aptitude update
aptitude install arta-synergy-health-monitoring
1.1.3. Настройка мониторинга на сервере Synergy¶
PMM-Server должен быть доступен с сервера Synergy, это можно проверить, например, командой ping
.
В первую очередь нужно установить соединение между сервером Synergy и PMM-Server. Для этого используется консольная команда:
pmm-admin config --server=server[:port]
Если соединение успешно установилось, в консоли должен появиться подобный вывод:
root@client:~# pmm-admin config --server=192.168.2.234:8080
OK, PMM server is alive.
PMM Server | 192.168.2.234:8080
Client Name | client
Client Address | 192.168.2.84
После этого можно подключать мониторинг требуемых сервисов.
1.1.3.1. Основные команды pmm-admin¶
Возможные команды, настройки и флаги pmm-admin можно посмотреть, выполнив в терминале pmm-admin --help
.
Для просмотра списка и состояния наблюдаемых сервисов используется команда pmm-admin list
.
В общем случае команда подключения мониторинга сервиса выглядит так:
pmm-admin add external:services job_name [instance] --service-port=port [flags]
,
где нужно указать имя задания для Prometheus, порт, используемый экспортером, и при необходимости название инстанса.
Инстанс нужно указывать, если настраивается мониторинг одновременно JBoss/ Wildfly и Cassandra, а также при добавлении нескольких нод одного сервиса, собранных в кластер.
Кроме того, можно добавить инстанс к уже существующему заданию Prometheus. Если, к примеру, позже была подключена ещё одна нода какого-либо сервиса и для неё также установлен пакет SHM, используется следующая команда:
pmm-admin add external:instances job_name [host1:port1[=instance1]] [host2:port2[=instance2]] ... [flags]
Например, настроен мониторинг одного экземпляра Elasticsearch:
root@hamming:~# pmm-admin list
pmm-admin 1.17.1
PMM Server | 192.168.2.234:8080
Client Name | hamming
. . . . .
Job name Scrape interval Scrape timeout Metrics path Scheme Target Labels Health
elastic 1m0s 10s /metrics http 192.168.2.198:9114 instance="node1" UP
Команда для добавления ноды может выглядеть так:
pmm-admin add external:instances elastic 192.168.2.181:9114=node2
Добавленная нода в списке:
root@hamming:~# pmm-admin list
pmm-admin 1.17.1
PMM Server | 192.168.2.234:8080
Client Name | hamming
. . . . .
Job name Scrape interval Scrape timeout Metrics path Scheme Target Labels Health
elastic 1m0s 10s /metrics http 192.168.2.198:9114 instance="node1" UP
elastic 1m0s 10s /metrics http 192.168.2.181:9114 instance="node2" UP
На соответствующем дашборде можно будет выбрать нужную ноду в параметре Instance
:
Для удаления ненужных сервисов используется команда:
pmm-admin remove external:service job_name --service-port=port [flags]
Например, для Elasticsearch:
pmm-admin remove external:service elastic --service-port=9114
Для удаления отдельного инстанса:
pmm-admin remove external:instances job_name [host1:port1] [host2:port2] ... [flags]
Примечание
Удаляются только задания для инстанса, на котором выполнена команда. Чтобы удалить задания для других инстансов, нужно выполнять аналогичные команды на них.
1.1.3.2. Мониторинг Linux и MySQL¶
Для мониторинга операционной системы и MySQL в консоли нужно выполнить команду, используя логин и пароль пользователя для mysql:
pmm-admin add mysql --user root --password root
Если мониторинг этих сервисов успешно добавился, команда pmm-admin list
должна показать подобный список:
root@client:~# pmm-admin list
pmm-admin 1.17.1
PMM Server | 192.168.2.234:8080
Client Name | client
Client Address | 192.168.2.84
Service Manager | linux-systemd
-------------- ------- ----------- -------- ------------------------------------------- --------------------------------------------------------------------------------------
SERVICE TYPE NAME LOCAL PORT RUNNING DATA SOURCE OPTIONS
-------------- ------- ----------- -------- ------------------------------------------- --------------------------------------------------------------------------------------
mysql:queries client - YES root:***@unix(/var/run/mysqld/mysqld.sock) query_source=slowlog, query_examples=true, slow_log_rotation=true, retain_slow_logs=1
linux:metrics client 42000 YES -
mysql:metrics client 42002 YES root:***@unix(/var/run/mysqld/mysqld.sock)
1.1.3.3. Мониторинг JBoss/Wildfly¶
Для мониторинга JBoss/Wildfly нужно добавить следующие строки в /opt/synergy/jboss/bin/standalone.conf
:
JAVA_OPTS="$JAVA_OPTS -Xbootclasspath/p:/opt/synergy/jboss/modules/system/layers/base/org/wildfly/common/main/wildfly-common-1.4.0.Final.jar"
JAVA_OPTS="$JAVA_OPTS -Xbootclasspath/p:/opt/synergy/jboss/modules/system/layers/base/org/jboss/logmanager/main/jboss-logmanager-2.1.4.Final.jar"
JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=org.jboss.byteman,org.jboss.logmanager"
JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
JAVA_OPTS="$JAVA_OPTS -javaagent:/opt/synergy/jboss/standalone/lib/ext/jmx_prometheus_javaagent.jar=58080:/opt/synergy/jboss/standalone/configuration/jboss.yaml"
Затем сделать доступной статистику источников данных, добавив statistics-enabled="true"
для SynergyDS
и StorageDS
в /opt/synergy/jboss/standalone/configuration/standalone-onesynergy.xml
:
<xa-datasource jndi-name="java:/SynergyDS" pool-name="synergy_ds" enabled="true" use-ccm="false" statistics-enabled="true">
<xa-datasource-property name="URL">
jdbc:mysql://127.0.0.1:3306/synergy?useUnicode=true&characterEncoding=utf8
. . . . . .
</xa-datasource>
…
<xa-datasource jndi-name="java:/StorageDS" pool-name="storage_ds" enabled="true" use-ccm="false" statistics-enabled="true">
<xa-datasource-property name="URL">
jdbc:mysql://127.0.0.1:3306/storage?useUnicode=true&characterEncoding=utf8
. . . . . .
</xa-datasource>
После этого нужно перезапустить JBoss/Wildfly.
По умолчанию конфигурационный файл jboss.yaml
и экспортер метрик jmx_prometheus_javaagent.jar
находятся в вышеуказанном расположении. Если вы перемещаете их, укажите новый путь в standalone.conf
.
Здесь также можно указать другой порт для передачи метрик.
Собираемые метрики доступны для просмотра в браузере по адресу http://server:58080/metrics
. Если в standalone.conf
используется другой порт, в адресной строке нужно указывать его.
Далее следует добавить мониторинг JBoss/Wildfly в PMM-Server, в общем случае команда выглядит так:
pmm-admin add external:service --service-port=58080 jboss testserver-jboss
, где
- jboss - имя задания для Prometheus;
- testserver-jboss - название инстанса. Так как аналогичный экспортер используется и для Cassandra, нужно указать название явно, чтобы метрики JBoss/Wildfly и Cassandra не смешивались на графиках. Кроме того, нужно указывать инстансы в случаях, когда используется несколько экземпляров.
1.1.3.4. Мониторинг nginx¶
Для мониторинга nginx нужно добавить следующие строки в /etc/nginx/nginx.conf
в секцию Logging settings
:
log_format shm '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'$request_time $hostname';
Далее в файле /etc/nginx/sites-enabled/synergy-base
в разделе location /Synergy
добавить
в описание лога synergy.access.log
определённый шагом ранее формат, в данном случае shm
:
location /Synergy {
proxy_pass http://127.0.0.1:8080/Synergy;
...
access_log /var/log/nginx/synergy.access.log shm;
}
Чтобы изменения вступили в силу, нужно перезапустить nginx:
/etc/init.d/nginx restart
В конфигурационном файле /etc/prometheus-nginxlog-exporter.hcl
нужно указать параметры app
и
instance
, также можно назначить другой порт (по умолчанию 4040):
listen {
port = 4040
address = "0.0.0.0"
}
namespace "synergy" {
format = "$remote_addr - $remote_user [$time_local] \"$request\" $status $body_bytes_sent \"$http_referer\" \"$http_user_agent\" $request_time $hostname"
source_files = [
"/var/log/nginx/synergy.access.log"
]
labels {
app = "nginx284"
instance = "testserver-nginx"
}
histogram_buckets = [.005, .01, .025, .05, .1, .25, .5, 1, 2.5, 5, 10]
}
Запустить мониторинг запросов nginx:
systemctl start prometheus-nginxlog-exporter.service
Собираемые метрики доступны для просмотра в браузере по адресу http://server:4040/metrics
.
Далее следует добавить мониторинг nginx в PMM-Server, в общем случае команда выглядит так:
pmm-admin add external:service --service-port=4040 nginx testserver-nginx --interval 10s
Параметр --interval
указывает интервал сбора метрик в PMM-Server, для экспортера nginx лучше
указать интервал меньше, чем интервал по умолчанию, который равен 1 минуте.
1.1.3.5. Мониторинг Cassandra¶
Для мониторинга Cassandra нужно добавить в /etc/cassandra/cassandra-env.sh
строку:
JVM_OPTS="$JVM_OPTS -javaagent:/usr/share/cassandra/lib/jmx_prometheus_javaagent.jar=7070:/etc/cassandra.yaml"
Затем закомментировать в /etc/init.d/cassandra
строки:
# Read Cassandra environment file.
#. /etc/cassandra/cassandra-env.sh
#if [ -z "$JVM_OPTS" ]; then
# echo "Initialization failed; \$JVM_OPTS not set!" >&2
# exit 3
#fi
Выполнить обновление конфигов systemd
:
systemctl daemon-reload
Перезапустить Cassandra:
/etc/init.d/cassandra restart
По умолчанию конфигурационный файл cassandra.yaml
и экспортер метрик jmx_prometheus_javaagent.jar
находятся в вышеуказанном расположении. Если вы перемещаете их, укажите новый путь в cassandra-env.sh
.
Здесь также можно указать другой порт для мониторинга.
Собираемые метрики доступны для просмотра в браузере по адресу http://server:7070/metrics
. Если в cassandra-env.sh
используется другой порт, в адресной строке нужно указывать его.
Далее следует добавить мониторинг Cassandra в PMM-Server, в общем случае команда выглядит так:
pmm-admin add external:service --service-port=7070 cassandra testserver-cassandra
Так как аналогичный экспортер используется и для JBoss/Wildfly, нужно указать явно название инстанса (в данном случае testserver-cassandra), чтобы метрики JBoss/Wildfly и Cassandra не смешивались на графиках. Кроме того, нужно указывать инстансы в случаях, когда используется кластер из нескольких нод Cassandra.
1.1.3.6. Мониторинг Elasticsearch¶
Запуск сбора метрик Elasticsearch осуществляется с помощью команды:
systemctl start prometheus-elasticsearch-exporter.service
Добавление мониторинга в PMM-Server:
pmm-admin add external:service --service-port=9114 elastic