Установка системы мониторинга для кластерного развертывания

Инструкция описывает два сценария установки системы мониторинга:

Установка Grafana

Grafana — это мультиплатформенное веб-приложение для аналитики и интерактивной визуализации с открытым исходным кодом.

Установка производится на ноду demo-entaxy-mon1

Для установки Grafana и включения сервиса выполним следующие команды:

$ sudo apt-get install -y
$ wget https://dl.grafana.com/oss/release/grafana-enterprise_9.3.0_amd64.deb
$ sudo dpkg -i grafana-enterprise_9.3.0_amd64.deb

$ sudo /bin/systemctl daemon-reload
$ sudo /bin/systemctl enable grafana-server
$ sudo /bin/systemctl start grafana-server

Установка и настройка Prometheus

  1. Скачиваем Prometheus
    wget https://github.com/prometheus/prometheus/releases/download/v2.33.0-rc.0/

  2. Распаковываем в /opt

    sudo tar xvf ./prometheus-2.33.0-rc.0.linux-amd64.tar.gz --directory /opt/
  3. Создаём файл конфигурации prometheus.yml

    sudo nano /opt/prometheus-2.33.0-rc.0.linux-amd64/prometheus.yml
    # my global config
    global:
      scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
    
      evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
      # scrape_timeout is set to the global default (10s).
    
    # Alertmanager configuration
    alerting:
      alertmanagers:
    - static_configs:
    - targets:
    # - alertmanager:9093
    
    # Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
    rule_files:
      # - "first_rules.yml"
    
      # - "second_rules.yml"
    
    # A scrape configuration containing exactly one endpoint to scrape:
    # Here it's Prometheus itself.
    scrape_configs:
    
      # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
      - job_name: "prometheus"
    
        # metrics_path defaults to '/metrics'
        # scheme defaults to 'http'.
    
        static_configs:
          - targets: ["localhost:9090"]
    
    - job_name: 'java-demo-entaxy-krf1' metrics_path: /metrics static_configs:
    - targets: ['X.X.X.X:XXXX']
    
    - job_name: 'java-demo-entaxy-krf2' metrics_path: /metrics static_configs:
    - targets: ['X.X.X.X:XXXX']
    
    - job_name: 'java-demo-entaxy-amq1' metrics_path: /metrics static_configs:
    - targets: ['X.X.X.X:XXXX']
    
    - job_name: 'demo-entaxy-krf1' metrics_path: /metrics static_configs:
    - targets: ['X.X.X.X:XXXX']
    
    - job_name: 'demo-entaxy-krf2' metrics_path: /metrics static_configs:
    - targets: ['X.X.X.X:XXXX']
    
    - job_name: 'demo-entaxy-amq1' metrics_path: /metrics static_configs:
    - targets: ['X.X.X.X:XXXX']
    
    - job_name: node metrics_path: /metrics static_configs:
    - targets: ['X.X.X.X:XXXX']
    - targets: ['X.X.X.X:XXXX']
    - targets: ['X.X.X.X:XXXX']
  4. Создаём юнит для запуска сервиса /etc/systemd/system/prometheus.service

    sudo nano /etc/systemd/system/prometheus.service
    [Unit]
    Description=prometheus
    After=network.target
    StartLimitIntervalSec=0
    
    [Service]
    Type=simple
    User=root
    WorkingDirectory=/opt/prometheus-2.33.0-rc.0.linux-amd64
    LimitAS=infinity
    LimitRSS=infinity
    LimitCORE=infinity
    LimitNOFILE=65536
    ExecStart=/opt/prometheus-2.33.0-rc.0.linux-amd64/prometheus
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
  5. Переинициализируем systemd-unit, включаем и запускаем сервис. Проверяем статус.

    systemctl daemon-reload
    systemctl enable prometheus.service
    prometheus
    systemctl start prometheus.service
    systemctl status prometheus.service
  6. После входа в веб интерфейс Grafana необходимо зарегистрировать новый Datasource Prometheus с адресом:

Установка и настройка Loki

Loki – это система хранения логов.
Установка производится на ноду demo-entaxy-mon1

  1. Скачиваем Loki
    wget https://github.com/grafana/loki/releases/download/v2.2.1/loki-linux-amd64.zip

  2. Распаковываем в /opt/

    sudo unzip ./loki-linux-amd64.zip -d /opt/loki
  3. Назначаем права

    chmod 755 /opt/loki/loki-linux-amd64
  4. Создаем файл сервиса /etc/systemd/system/loki.service

    sudo nano /etc/systemd/system/loki.service
    [Unit]
    Description=loki
    After=network.target
    StartLimitIntervalSec=0
    
    [Service]
    Type=simple
    User=root
    WorkingDirectory=/opt/loki
    LimitAS=infinity
    LimitRSS=infinity
    LimitCORE=infinity
    LimitNOFILE=65536
    ExecStart=/opt/loki/loki-linux-amd64 -config.file=/opt/loki/loki-local-config.yaml
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
  5. Создаем файл /opt/loki/loki-local-config.yaml

    sudo nano /opt/loki/loki-local-config.yaml
    auth_enabled: false
    
    server:
    http_listen_port: 3100
    
    ingester:
        lifecycler:
            address: 127.0.0.1
            ring:
                kvstore:
                    store: inmemory
                replication_factor: 1
            final_sleep: 0s
        chunk_idle_period: 5m
        chunk_retain_period: 30s
        max_transfer_retries: 0
    
    schema_config:
        configs:
            - from: 2018-04-15
            store: boltdb
            object_store: filesystem
            schema: v11
            index:
                prefix: index_
                period: 168h
    
    storage_config:
        boltdb:
            directory: /opt/loki/data/index
    
      filesystem:
        directory: /opt/loki/data/chunks
    
    limits_config:
        enforce_metric_name: false
        reject_old_samples: true
        reject_old_samples_max_age: 168h
    
    chunk_store_config:
        max_look_back_period: 0s
    
    table_manager:
        retention_deletes_enabled: false
        retention_period: 0s
  6. Переинициализируем systemd-unit, включаем и запускаем сервис. Проверяем статус.

    sudo systemctl daemon-reload
    sudo systemctl enable loki.service
    sudo systemctl start loki.service
    sudo systemctl status loki.service
  7. После входа в веб интерфейс Grafana необходимо зарегистрировать новый Datasource Loki с адресом:

    loki

Установка и настройка Fluent-bit

Fluent bit – это легковесная служба обработки и пересылки логов с открытым исходным кодом.
Установка производится на ноды demo-entaxy-mon1, demo-entaxy-amq1, demo-entaxy-krf1 и demo-entaxy-krf2.

  1. Скачиваем Fluent-bit:
    wget https://fluentbit.io/releases/1.8/fluent-bit-1.8.12.tar.gz

  2. Распаковываем во временную папку
    tar xvf ./fluent-bit-1.8.12.tar.gz --directory ./temp/

  3. Настраиваем службу Fluent-bit

    [Unit]
    Description=fluentbit
    After=network.target
    StartLimitIntervalSec=0
    
    [Service]
    Type=simple
    User=root
    WorkingDirectory=/opt/fluent-bit
    LimitAS=infinity
    LimitRSS=infinity
    LimitCORE=infinity
    LimitNOFILE=65536
    ExecStart=/opt/fluent-bit/fluent-bit -e /opt/fluent-bit/out_loki.so -c /opt/fluent-bit/fluentBit.conf
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
  4. Копируем файл loki/cmd/fluent-bit/out_loki.so в /opt/fluent-bit

  5. Создаём в папке /opt/fluent-bit файл fluentBit.conf.

  6. Для Artemis (demo-entaxy-amq1) файл будет выглядеть так:

    sudo nano /opt/fluent-bit/fluentBit.conf
    [SERVICE]
        Flush 5
        Daemon Off
        Log_Level info
        Parsers_File /opt/fluent-bit/parsers.conf
    
    [INPUT]
        Name tail
        Path /opt/artemis/brokers/entaxy-broker/log/artemis.log
        Refresh_Interval 5
        Buffer_Chunk_Size 100k
        Buffer_Max_Size 1M
        Tag entaxy
        Key message
        Multiline On
        Multiline_Flush 1
        Parser_Firstline entaxy
    
    [OUTPUT]
        Name loki
        Match *
        host X.X.X.X
        port 3100
        line_format json
        labels job=amq-1
        label_keys $log_level
  7. Для серверов karaf (demo-entaxy-krf1 и demo-entaxy-krf2) этот файл будет выглядеть так:

    [SERVICE]
        Flush        5
        Daemon       Off
        Log_Level    info
        Parsers_File /opt/fluent-bit/parsers.conf
    
    [INPUT]
        Name tail
        Path /opt/karaf/data/log/karaf.log
        Refresh_Interval  5
        Buffer_Chunk_Size 100k
        Buffer_Max_Size 1M
        Tag entaxy
        Key message
        Multiline On
        Multiline_Flush 1
        Parser_Firstline entaxy
    
    [OUTPUT]
        Name loki
        Match *
        host X.X.X.X
        port 3100
        line_format json
        labels job=entaxy-1, service=$data['service'], operation=$data['operation'], objectId=$data['objectId'], parameter=$data['parameter'], sender=$data['sender'], receiver=$data['receiver']
        label_keys $log_level, $request
  8. В параметре Path нужно указать путь к логам Artemis, в параметрах host и port нужно соответственно указать адрес и порт сервиса Loki.

  9. В нашем случае это сервер demo-entaxy-mon1 (X.X.X.X:XXXX).

  10. Создаем файл labelmap.json

    sudo nano /opt/fluent-bit/labelmap.json
    {
        "instance": "instance",
        "log_level": "log_level",
        "service": "service"
    }
  11. Создаем файл parsers.conf в папке /opt/fluent-bit

    [PARSER]
            Name        observability
            Format      json
            Time_Key    time
            Time_Format %Y-%m-%dT%H:%M:%S.%L
    
    [PARSER]
            Name entaxy
            Format regex
            Regex ^(?<date>\d{2,4}\-\d{2,4}\-\d{2,4}T\d{2,4}\:\d{2,4}\:\d{2,4}\,\d{1,6}) \| (?<log_level>[^\s]+)[\s]+\| (?<thread>[^\|]+) \| (?<object>[^\s]+)[\s]+\| (?<bundle>\d{2,4} \- [^\s]+ \- [^\s]
    +) \| (((?<request>\w{8}\-\w{4}\-\w{4}-\w{4}\-\w{12}))#(?<data>[^#]+)#[\s]*?(?<step>.*)| ?(?<message>.*))$
            Decode_Field_As json data
            Time_Key date
            Time_Format %Y-%m-%dT%H:%M:%S,%L
            #Time_Offset +0300
            Time_Keep    On
  12. Создаем для сервера Artemis файл parsers.conf в папке /opt/fluent-bit

    [PARSER]
            Name        observability
            Format      json
            Time_Key    time
            Time_Format %Y-%m-%dT%H:%M:%S.%L
    
    [PARSER]
            Name entaxy
            Format regex
            Regex ^(?<date>\d{2,4}\-\d{2,4}\-\d{2,4}T\d{2,4}\:\d{2,4}\:\d{2,4}\,\d{1,6}) \| (?<log_level>[^\s]+)[\s]+\| (?<thread>[^\|]+) \| (?<object>[^\s]+)[\s]+\| (?<bundle>\d{2,4} \- [^\s]+ \- [^\s]
    +) \| ?(?<message>.*)$
            Time_Key date
            Time_Format %Y-%m-%dT%H:%M:%S,%f
            Time_Offset +0300
  13. Создаем юнит для запуска сервиса /etc/systemd/system/fluentbit.service

    sudo nano /etc/systemd/system/fluentbit.service
    [Unit]
    Description=fluentbit
    After=network.target
    StartLimitIntervalSec=0
    
    [Service]
    Type=simple
    User=root
    WorkingDirectory=/opt/fluent-bit
    LimitAS=infinity
    LimitRSS=infinity
    LimitCORE=infinity
    LimitNOFILE=65536
    ExecStart=/opt/fluent-bit/fluent-bit -e /opt/fluent-bit/out_loki.so -c /opt/fluent-bit/fluentBit.conf
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
  14. Переинициализируем systemd-unit, включаем и запускаем сервис. Проверяем статус.

    sudo systemctl daemon-reload
    sudo systemctl enable fluentbit.service
    sudo systemctl start fluentbit.service
    sudo systemctl status fluentbit.service

Установка и настройка Node Exporter

Node_Exporter – это агент для сбора метрик состояния серверов.
Агент устанавливается на ноды demo-entaxy-amq1, demo-entaxy-krf1 и demo-entaxy-krf2 в каталоге /opt/node_exporter-1.5.0.linux-amd64 и работает на стандартном порту – 9100.

  1. Скачиваем дистрибутив
    wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz

  2. Распаковываем

    sudo tar xvf node_exporter-1.5.0.linux-amd64.tar.gz --directory /opt/
  3. Создаем файл сервиса

    sudo nano /etc/systemd/system/node_exporter.service
    [Unit]
    Description=Node Exporter
    After=network.target
    
    [Service]
    User=root
    Type=simple
    ExecStart=/opt/node_exporter-1.5.0.linux-amd64/node_exporter
    
    [Install]
    WantedBy=multi-user.target
  4. Активируем и запускаем сервис

    sudo systemctl daemon-reload
    sudo systemctl enable node_exporter.service
    sudo systemctl start node_exporter.service
    sudo systemctl status node_exporter.service

Установка и настройка Telegraf

Telegraf – это агент для сбора java-метрик, jmx-метрик Entaxy ION и ActiveMQ Artemis. Агент устанавливается на нодах demo-entaxy-amq1, demo-entaxy-krf1 и demo-entaxy-krf2.

  1. Устанавливаем агент на ноды

    wget -q https://repos.influxdata.com/influxdata-archive_compat.key
    
    echo '393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c influxdata-archive_compat.key' | sha256sum -c && cat influxdata-arch
    ive_compat.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null
    
    echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc
    /apt/sources.list.d/influxdata.list
    
    sudo apt-get update && sudo apt-get install telegraf
  2. После завершения установки переходим к каталогу с конфигурационными файлами Telegraf и удаляем стандартные конфиги telegraf.conf и telegraf.conf.sample

  3. Создаем новый конфиг telegraf.conf со следующими параметрами

    • Для нод karaf (demo-entaxy-krf1 и demo-entaxy-krf2):

      sudo nano /etc/telegraf/telegraf.conf
      
      [global_tags]
      
      [agent]
        interval = "10s"
        round_interval = false
      
      
        metric_batch_size = 100000
      
        metric_buffer_limit = 10000
      
        collection_jitter = "0s"
      
        flush_interval = "10s"
      
        flush_jitter = "0s"
      
        precision = ""
      
       [[outputs.prometheus_client]]
      
          listen = ":9191"
      
          path = "/metrics"
      
          expiration_interval = "0s"
      
      [[inputs.jolokia2_agent]]
      
         urls = ["http://localhost:8181/hawtio/jolokia"]
         username = "karaf"
         password = "karaf"
      
         [[inputs.jolokia2_agent.metric]]
          name     = "context"
          mbean    = "org.apache.camel:context=*,type=context,name=*"
          paths = ["ExchangesCompleted", "ExchangesFailed", "ExchangesInflight", "ExchangesTotal", "MinProcessingTime", "MaxProcessingTime", "MeanProcessingTime", "Redeliveries"]
          tag_keys = ["name"]
      
      [[inputs.jolokia2_agent.metric]]
          name     = "routes"
          mbean    = "org.apache.camel:context=*,type=routes,name=*"
          paths = ["ExchangesCompleted", "ExchangesFailed", "ExchangesInflight", "ExchangesTotal", "MinProcessingTime", "MaxProcessingTime", "MeanProcessingTime", "Redeliveries", "CamelId"]
          tag_keys = ["name", "CamelId"]
      
        [[inputs.jolokia2_agent.metric]]
          name  = "java_runtime"
          mbean = "java.lang:type=Runtime"
          paths = ["Uptime"]
      
        [[inputs.jolokia2_agent.metric]]
          name  = "java_memory"
          mbean = "java.lang:type=Memory"
          paths = ["HeapMemoryUsage", "NonHeapMemoryUsage", "ObjectPendingFinalizationCount"]
        [[inputs.jolokia2_agent.metric]]
          name     = "java_garbage_collector"
          mbean    = "java.lang:name=*,type=GarbageCollector"
          paths    = ["CollectionTime", "CollectionCount"]
          tag_keys = ["name"]
      
        [[inputs.jolokia2_agent.metric]]
          name  = "java_last_garbage_collection"
          mbean = "java.lang:name=*,type=GarbageCollector"
          paths = ["LastGcInfo"]
          tag_keys = ["name"]
      
        [[inputs.jolokia2_agent.metric]]
          name  = "java_threading"
          mbean = "java.lang:type=Threading"
          paths = ["TotalStartedThreadCount", "ThreadCount", "DaemonThreadCount", "PeakThreadCount"]
      
        [[inputs.jolokia2_agent.metric]]
          name  = "java_class_loading"
          mbean = "java.lang:type=ClassLoading"
          paths = ["LoadedClassCount", "UnloadedClassCount", "TotalLoadedClassCount"]
      
        [[inputs.jolokia2_agent.metric]]
          name     = "java_memory_pool"
          mbean    = "java.lang:name=*,type=MemoryPool"
          paths    = ["Usage", "PeakUsage", "CollectionUsage"]
          tag_keys = ["name"]
      
        [[inputs.jolokia2_agent.metric]]
          name  = "java"
          mbean = "java.lang:type=OperatingSystem"
          paths = ["OpenFileDescriptorCount", "ProcessCpuLoad", "ProcessCpuTime", "SystemCpuLoad", "SystemLoadAverage"]
      
      [[processors.regex]]
        namepass = ["context", "routes"]
      
        [[processors.regex.tags]]
          key = "name"
          pattern = "\"(.*)\""
          replacement = "${1}"
    • Для ноды Artemis (demo-entaxy-amq1):

      [global_tags]
      
      [agent]
        interval = "10s"
        round_interval = false
      
      
        metric_batch_size = 100000
      
        metric_buffer_limit = 10000
      
        collection_jitter = "0s"
      
        flush_interval = "10s"
      
        flush_jitter = "0s"
      
        precision = ""
      
       [[outputs.prometheus_client]]
      
          listen = ":9090"
      
          path = "/metrics"
      
      [[inputs.jolokia2_agent]]
      
         urls = ["http://localhost:8161/console/jolokia"]
         username = "artemis"
         password = "artemis"
      
        [[inputs.jolokia2_agent.metric]]
          name     = "address"
          mbean    = "org.apache.activemq.artemis:broker=*,component=addresses,address=*"
          paths = ["NumberOfMessages", "MessageCount", "RoutedMessageCount", "UnRoutedMessageCount"]
          tag_keys = ["address"]
      
        [[inputs.jolokia2_agent.metric]]
          name     = "queue"
          mbean    = "org.apache.activemq.artemis:broker=*,component=addresses,address=*,subcomponent=queues,routing-type=*,queue=*"
          paths = ["AcknowledgeAttempts", "MessageCount", "MessagesAcknowledged", "MessagesAdded", "MessagesExpired", "MessagesKilled", "PersistentSize"]
          tag_keys = ["queue", "address"]
      
        [[inputs.jolokia2_agent.metric]]
          name  = "java_runtime"
          mbean = "java.lang:type=Runtime"
          paths = ["Uptime"]
      
        [[inputs.jolokia2_agent.metric]]
          name  = "java_memory"
          mbean = "java.lang:type=Memory"
          paths = ["HeapMemoryUsage", "NonHeapMemoryUsage", "ObjectPendingFinalizationCount"]
      [[inputs.jolokia2_agent.metric]]
          name     = "java_garbage_collector"
          mbean    = "java.lang:name=*,type=GarbageCollector"
          paths    = ["CollectionTime", "CollectionCount"]
          tag_keys = ["name"]
      
        [[inputs.jolokia2_agent.metric]]
          name  = "java_last_garbage_collection"
          mbean = "java.lang:name=*,type=GarbageCollector"
          paths = ["LastGcInfo"]
          tag_keys = ["name"]
      
        [[inputs.jolokia2_agent.metric]]
          name  = "java_threading"
          mbean = "java.lang:type=Threading"
          paths = ["TotalStartedThreadCount", "ThreadCount", "DaemonThreadCount", "PeakThreadCount"]
      
        [[inputs.jolokia2_agent.metric]]
          name  = "java_class_loading"
          mbean = "java.lang:type=ClassLoading"
          paths = ["LoadedClassCount", "UnloadedClassCount", "TotalLoadedClassCount"]
      
        [[inputs.jolokia2_agent.metric]]
          name     = "java_memory_pool"
          mbean    = "java.lang:name=*,type=MemoryPool"
          paths    = ["Usage", "PeakUsage", "CollectionUsage"]
          tag_keys = ["name"]
      
        [[inputs.jolokia2_agent.metric]]
          name  = "java"
          mbean = "java.lang:type=OperatingSystem"
          paths = ["OpenFileDescriptorCount", "ProcessCpuLoad", "ProcessCpuTime", "SystemCpuLoad", "SystemLoadAverage"]
      
      [[processors.regex]]
        namepass = ["address", "queue"]
      
        [[processors.regex.tags]]
          key = "address"
          pattern = "\"(.*)\""
          replacement = "${1}"
      
        [[processors.regex.tags]]
          key = "queue"
          pattern = "\"(.*)\""
          replacement = "${1}"

      Путь к метрикам сообщений, который указан в секции «address», должен соответствовать настройкам имени конкретной установки Artemis.

    • Пример настройки нашего стенда в Яндекс

      [[inputs.jolokia2_agent.metric]]
          name     = "address"
          mbean    = "org.apache.activemq.artemis:broker=\"entaxy-broker\",component=addresses,address=*"
          tag_keys = ["address"]
      jmx dlq

      Из примера видно, что наша установка Artemis имеет имя entaxy-broker. Имя установки задаётся в конфигурационном файле broker.xml на сервере Artemis инструкцией <name>entaxy-broker</name>.

      В конфигурационном файле telegraf.conf в секции [inputs.jolokia2_agent] указан путь к консоли jolokia, а также имя пользователя и пароль.

      urls = ["http://localhost:8161/console/jolokia"]
         username = "artemis"
         password = "artemis"

      Для того чтобы включить доступа мониторинга к консоли jolokia необходимо отключить политику на брокере Artemis. Для этого нужно закомментировать параметр <strict-checking/> в файле /opt/artemis/brokers/entaxy-broker/etc/jolokia-access.xml

       <cors>
              <!-- Allow cross origin access from localhost ... -->
              <allow-origin>*://*</allow-origin>
      
      
              <!-- Options from this point on are auto-generated by Create.java from the Artemis CLI -->
              <!-- Check for the proper origin on the server side, too -->
              <!-- <strict-checking/> -->
       </cors>

      Политика применится после перезапуска сервиса Artemis

      sudo systemctl restart entaxy@artemis.service

      После отключения политики и настройки доступов включаем и запускаем сервис. Проверяем статус.

      sudo systemctl enable telegraf.service
      sudo systemctl start telegraf.service
      sudo systemctl status telegraf.service

      Теперь агент отправляет все метрики на страницу /metrics по портам: 9191 для Entaxy ION и 9090 для ActiveMQ Artemis.

Дополнительные действия с дашбордами Grafana

После импорта дашбордов Grafana, необходимо сделать дополнительные действия. Нужно зайти в настройки дашборда и проверить, что правильно указан Data source и имя job’ы соответствует заданной в prometheus.yml (см. раздел Установка и настройка Prometheus). Также нужно указать значение в поле Custom all value.

  • Пример настроек для Artemis

    activemq settings
  • Пример настроек для Karaf

    camel settings

Работа с Grafana

Создание пользователей и изменение пароля администратора

  • Создание пользователей и изменение пароля администратора
    Web-интерфейс Grafana - http://yourip:3000/

    grafana login
  • Для авторизации в систему мониторинга используется стандартный логин и пароль администратора admin/admin При авторизации система предложит изменить пароль учетной записи.

    grafana password
  • Можно изменить пароль учетной записи администратора или пропустить этот шаг нажав на кнопку «Skip». В дальнейшем, пароль от учетной записи можно поменять под авторизованным в системе пользователем наведя курсором мышки на лого пользователя в левом нижнем углу экрана и выбрав пункт «Change password».

    change password
  • Создание новых пользователей в Grafana происходит в меню «Server admin» (пиктограмма щита в левом нижнем углу экрана), пункте «Users».

    server admin
    server admin users
  • По кнопке «New user» можно создать нового пользователя, указав необходимые данные и пароль на открывшейся странице

    server admin new user

Дэшборды

Для мониторинга серверов в Grafana предустановлен набор типовых дэшбордов с настроенными графиками для отслеживания состояния серверов и приложений.

  • Entaxy environment services - панель агрегирующая состояния по сервисам ОС, используемым в среде Entaxy;

  • Karaf cluster - здоровье кластера среды исполнения Apache Karaf;

  • Node_Exporter_Full - панель с графиками, отображающими состояние виртуальной машины (CPU, RAM, Memory и т.д.);

  • Java - панель с графиками, отображающими состояние виртуальной машины Java;

  • Apache Camel - dashboard с графиками, отображающими состояние пакетов и их прохождение;

  • ActiveMQ - панель с графиками, отображающими состояние сообщений принятых/отправленных в брокере.

Описания дэшбордов

  • Camel - dashboard с графиками, отображающими состояние пакетов и их прохождение (кол-во)

    • Прямая ссылка на дэшборд: http://yourip:3000/d/sHSIELIWz/camel

    • В дэшборде имеются следующие графики:

      1. Exchanges Complited (Пакетов отправлено) - отображает количество успешно отправленных пакетов с разделением по маршрутам, в которых произошел обмен этими пакетами. Все новые маршруты динамически (автоматически) добавляются в график.

      2. Exchanges Failed (Пакетов не отправлено) - отображает количество не отправленных пакетов с разделением по маршрутам, в которых произошел сбой при обмене этими пакетами. Все новые маршруты динамически (автоматически) добавляются в график.

      3. Exchanges In Flight (Пакетов в обработке) - отображает количество пакетов, находящихся в обработке с разделением по маршрутам, в которых происходит обработка этих пакетов. Все новые маршруты динамически (автоматически) добавляются в график.

      4. Started Routes (Запущенные маршруты) - отображает маршруты по которым был запущен обмен пакетами с разделением по названию маршрута. Все новые маршруты динамически (автоматически) добавляются в график.

      5. Logs (Логи) – Логи ИШ Entaxy ION.

        Любой из графиков можно приблизить, наведя на него курсором и нажав кнопку «V».

        general camel
        apache v
  • ActiveMQ - dashboard с графиками, отображающими состояние сообщений принятых/отправленных в брокере

    • Прямая ссылка на дэшборд: http://yourip:3000/d/Flk6mRNWk/activemq

    • В дэшборде имеются следующие графики:

      1. Number Of Messages (Количество сообщений) - отображает общее количество сообщений с разделением по адресам, на которые были отправлены эти сообщения. Все новые адреса динамически (автоматически) добавляются в график.

      2. Routed Message Count (Количество доставленных сообщений) - отображает количество успешно доставленных сообщений с разделением по адресам, на которые были доставлены эти сообщения. Все новые адреса динамически (автоматически) добавляются в график.

      3. Unrouted Message Count (Количество не доставленных сообщений) - отображает количество не доставленных сообщений с разделением по адресам, на которые не были доставлены эти сообщения. Все новые адреса динамически (автоматически) добавляются в график.

      4. Logs (Логи) – Логи брокера сообщений ActiveMQ Artemis.

        Любой из графиков можно приблизить, наведя на него курсором и нажав кнопку «V».

        general activemq
  • Java - dashboard с графиками, отображающими состояние виртуальной машины, приложения которой используют Java

    • Прямая ссылка на дэшборд: http://yourip:3000/d/7622/java

    • В дэшборде имеются следующие графики:

      1. CPU Usage (Использование ЦПУ) – Отображает в процентном соотношении использование ядер ЦПУ java-приложением.

      2. Memory Heap/NON Heap (Память в куче/не в куче) – Отображает часть активно используемой памяти с объектами и ссылками. Требует активного мониторинга.

      3. Class loading (Классов загружено) – Количество загруженных классов java-приложением.

      4. Threads used (Потоков задействовано) – Количество активных потоков в java-приложении.

      5. Open File Descriptors (Файловый дескриптор) - Количество открытых соединений с файловой системой и сокетов.

      6. GC time/1 min. rate (Время работы сборщика мусора) – Время работы сборки мусора в java-приложении.

      7. GC count (Количество сборок мусора) – Количество произведенных сборок мусора.

        Любой из графиков можно приблизить, наведя на него курсором и нажав кнопку «V».

        general java
  • Node_Exporter_Full - dashboard с графиками, отображающими состояние виртуальной машины (CPU, RAM, Memory и т.д.)

    • Прямая ссылка на дэшборд: http://yourip:3000/d/lXqnWBGZz/node-exporter-full

    • В дэшборде имеются следующие графики, на которые стоит обратить наибольшее внимание:

      1. CPU Busy (Нагрузка ЦПУ) – Нагрузка на ядра центрального процессора сервера

      2. Used RAM Memory (Использование ОЗУ) – Общее количество использованной оперативной памяти на сервере

      3. Used SWAP (Использование свопа) – Количество дополнительной памяти на жёстком диске, которая была использована в случае исчерпания гарантированного объема оперативной памяти

      4. Used Root FS (Использование корневого раздела) – Количество памяти на жёстком диске, которое занято корневым разделом сервера

      5. CPU System Load (1 min avg) (Нагрузка ЦПУ задачами за минуту) – Нагрузка на ЦПУ сервера в процентном соотношении по активным задачам за минуту

      6. CPU System Load (5 min avg) (Нагрузка ЦПУ задачами за 5 минут) – Нагрузка на ЦПУ сервера в процентном соотношении по активным задачам за 5 минут

        Любой из графиков можно приблизить наведя на него курсором и нажав кнопку «V».

        node explorer

Сбор и анализ журналов

Grafana: Explore

Фильтрация логов осуществляется через раздел Explore в Grafana. С помощью конструктора запросов устанавливаются параметры фильтрации логов, возможен полнотекстный поиск, поиск по уровню записи и дате. Так же возможна агрегация и статистическая обработка записей.

Бизнес мониторинг

Для мониторинга интеграций предусмотрена панель Transactions, агрегирующая статусы обработанных сообщений, для зарегистрированных интеграций сервисов.

  • Из панели Transactions возможен переход на трассировку сообщения на панели Process, на которой выводится вся записанная в лог информация по процессу.

Оповещения

  • Для уведомлений по нештатным ситуациям используется функциональность Alerting сервера Grafana;

  • Alert rules раздел правил срабатывания оповещений;

  • Contact points группы адресов и каналы для уведомления;

  • Notification policies установка соответствия уведомлений и групп ответственных для оповещения.