Руководство по системному администрированию#
Термины и определения#
Термин/аббревиатура |
Определение |
|---|---|
Платформа |
Платформа оркестрации приложений со средствами автоматизации и управления на основе политик, например, Kubernetes |
StatefulSet / «kind: StatefulSet» |
Статический набор инструкций для запуска приложения в Kubernetes |
Pod / «kind: Pod» |
Набор контейнеров внутри узла кластера Kubernetes |
CLI |
Command line interface — интерфейс командной строки, где выполняются команды с использованием терминала |
GATM |
Программный компонент «Сбор и анализ метрик» (GATM) |
Kubernetes |
Платформа оркестрации приложений со средствами автоматизации и управления на основе политик |
SSM |
Platform V Synapse Service Mesh — программный продукт на базе Istio SE, обеспечивающий возможность создания сервисной сети поверх платформенной в Kubernetes |
URL |
Uniform Resource Locator — стандартизированный способ записи адреса ресурса в сети Интернет |
Target |
Сервисы/приложения, по которым будет производиться сбор метрик |
istio-proxy |
Компонент Сервисный прокси |
Configmap |
Общее описание конфигурации, которая будет храниться в рамках проекта кластера |
Deployment / «kind: Deployment» |
Набор инструкций для запуска приложения в Kubernetes |
Граничный прокси / IGEG / egressgateway |
Компонент Граничный прокси |
Сценарии администрирования#
Программный компонент «Сбор и анализ метрик» (GATM) не имеет собственного пользовательского интерфейса для администрирования. Все действия по управлению им производятся с использованием интерфейсов, предоставляемых Платформой Kubernetes.
Для взаимодействия с клиентом среды контейнеризации необходим токен или конфигурационный файл авторизации, подробнее об этом можно ознакомиться здесь.
Для выполнения сценариев администрирования администратору инсталляции компонента может пригодиться привязка к admin-role, стандартизированной реализации роли администратора проекта в рамках платформы K8s/OpenShift.
Запуск#
С использованием веб-интерфейса Kubernetes
Шаг |
Действие |
|---|---|
Вход в веб-консоль Kubernetes |
Перейдите по ссылке (URL) веб-консоли нужного кластера Kubernetes, в окне ввода учетных данных введите токен пользователя или «kubeconfig» |
Переход в нужный проект |
Выберите нужный проект в выпадающем списке в шапке веб-интерфейса Kubernetes |
Запуск Pod |
1. В меню выберите пункт Workload/StatefulSets(Deployment) |
Выход из веб-консоли Kubernetes |
1. Нажмите на имя пользователя, чтобы раскрыть меню учетной записи |
Через CLI Kubernetes (kubectl)
Шаг |
Действия |
Описание |
|---|---|---|
Вход в Kubernetes |
Загрузите «kubeConfig» от вашего «ServiceAccount». Заведите переменную |
— |
Переход в нужный «Namespace» |
Введите команду: |
— |
Запуск приложения |
В консоли выполните команду: |
N>0 — требуемое количество запущенных подов приложения |
Остановка#
С использованием веб-интерфейса Kubernetes
Шаг |
Действие |
|---|---|
Логин в веб-консоль Kubernetes |
Перейдите по ссылке (URL) веб-консоли нужного кластера Kubernetes, в окне ввода учетных данных введите токен пользователя или «kubeconfig» |
Переход в нужный проект |
Выберите нужный проект в выпадающем списке в шапке веб-интерфейса Kubernetes |
Остановка компонента |
Выполните следующие действия: |
Выйдите из веб-консоли Kubernetes |
Выполните следующие действия: |
Через CLI Kubernetes (kubectl)
Шаг |
Действия |
Описание |
|---|---|---|
Остановка приложения |
В консоли выполните команду |
— |
Проверка работоспособности#
С использованием веб-интерфейса Kubernetes
Шаг |
Действие |
|---|---|
Вход в веб-консоль Kubernetes |
Перейдите по ссылке (URL) веб-консоли нужного кластера Kubernetes, в окне ввода учетных данных введите токен пользователя или kubeconfig |
Переход в нужный проект |
Выберите нужный проект в выпадающем списке в шапке веб-интерфейса Kubernetes |
Переход во вкладку Pod |
В меню выберите пункт Workload/Pods. |
Через CLI Kubernetes (kubectl)
„Agent“#
Шаг |
Действия |
Описание |
|---|---|---|
Получение имени Pod |
В консоли выполните команду |
Выберите наименование Pod с наименованием «synapse-metrics-agent-****», указанное наименование пригодится на следующем шаге (<имя Pod>) |
Проверить работоспособность |
В консоли выполните команду: |
— |
Также проверьте отсутствие ошибок в рамках логов приложения (раздел «Выгрузка системных логов»).
Kafka „adapter“#
Шаг |
Действия |
Описание |
|---|---|---|
Получение имени Pod |
В консоли выполните команду |
Выберите наименование Pod с наименованием «synapse-metrics-adapter-****», указанное наименование пригодится на следующем шаге (<имя Pod>) |
Проверить работоспособность |
В консоли выполните команду: |
— |
Также проверьте отсутствие ошибок в рамках логов приложения (раздел «Выгрузка системных логов»).
Event exporter#
Шаг |
Действия |
Описание |
|---|---|---|
Получение имени Pod |
В консоли выполните команду |
Выберите наименование Pod с наименованием «synapse-metrics-event-exporter-****», указанное наименование пригодится на следующем шаге (<имя Pod>) |
Проверить работоспособность |
В консоли выполните команду: |
— |
Также проверьте отсутствие ошибок в рамках логов приложения (раздел «Выгрузка системных логов»).
Select#
Шаг |
Действия |
Описание |
|---|---|---|
Получение имени Pod |
В консоли выполните команду |
Выберите наименование Pod с наименованием «synapse-metrics-select-****», указанное наименование пригодится на следующем шаге (<имя Pod>) |
Проверить работоспособность |
В консоли выполните команду: |
— |
Также проверьте отсутствие ошибок в рамках логов приложения (раздел «Выгрузка системных логов»).
Insert#
Шаг |
Действия |
Описание |
|---|---|---|
Получение имени Pod |
В консоли выполните команду |
Выберите наименование Pod с наименованием «synapse-metrics-insert-****», указанное наименование пригодится на следующем шаге (<имя Pod>) |
Проверить работоспособность |
В консоли выполните команду: |
— |
Также проверьте отсутствие ошибок в рамках логов приложения (раздел «Выгрузка системных логов»).
Storage#
Шаг |
Действия |
Описание |
|---|---|---|
Получение имени Pod |
В консоли выполните команду |
Выберите наименование Pod с наименованием «synapse-metrics-storage-****», указанное наименование пригодится на следующем шаге (<имя Pod>) |
Проверить работоспособность |
В консоли выполните команду: |
— |
Также проверьте отсутствие ошибок в рамках логов приложения (раздел «Выгрузка системных логов»).
Alert#
Шаг |
Действия |
Описание |
|---|---|---|
Получение имени Pod |
В консоли выполните команду |
Выберите наименование Pod с наименованием «synapse-metrics-alert-****», указанное наименование пригодится на следующем шаге (<имя Pod>) |
Проверить работоспособность |
В консоли выполните команду: |
— |
Также проверьте отсутствие ошибок в рамках логов приложения (раздел «Выгрузка системных логов»).
AlertManager#
Шаг |
Действия |
Описание |
|---|---|---|
Получение имени Pod |
В консоли выполните команду |
Выберите наименование Pod с наименованием «synapse-metrics-alertmanager-****», указанное наименование пригодится на следующем шаге (<имя Pod>) |
Проверить работоспособность |
В консоли выполните команду: |
— |
Приложения „logs“#
Серверная часть#
Шаг |
Действия |
Описание |
|---|---|---|
Получение имени Pod |
В консоли выполните команду |
Выберите наименование Pod с наименованием «synapse-logs-storage-****», «synapse-logs-select-****», «synapse-logs-insert-****», указанные наименования пригодятся на следующем шаге (<имя Pod>) |
Проверить работоспособность |
В консоли выполните команду: |
— |
„Agent“ (logs)#
Шаг |
Действия |
Описание |
|---|---|---|
Получение имени Pod |
В консоли выполните команду |
Выберите наименование Pod, где установлен „agent“ (logs), указанное наименование пригодится на следующем шаге (<имя Pod>) |
Проверить работоспособность |
В консоли выполните команду: |
— |
Номер порта можно менять в файле «kind: ConfigMap» при необходимости. Более подробно можно ознакомиться в документе «Руководство по установке»
Sender#
Шаг |
Действия |
Описание |
|---|---|---|
Получение имени Pod |
В консоли выполните команду |
Выберите наименование Pod, где установлен synapse sender (logs), указанное наименование пригодится на следующем шаге (<имя Pod>) |
Проверить работоспособность |
В консоли выполните команду: |
— |
Порт приложения может быть переопределен в рамках стендозависимых параметров.
Приложения trace#
Шаг |
Действия |
Описание |
|---|---|---|
Получение имени Pod |
В консоли выполните команду |
Выберите наименование Pod с наименованием «synapse-trace-storage-****», «synapse-trace-proxy-****», указанные наименования пригодятся на следующем шаге (<имя Pod>) |
Проверить работоспособность |
В консоли выполните команду: |
— |
Получение имени Pod |
В консоли выполните команду |
Выберите наименование Pod с наименованием «synapse-trace-insert-****», указанное наименование пригодится на следующем шаге (<имя Pod>) |
Проверить работоспособность |
В консоли выполните команду: |
— |
Получение имени Pod |
В консоли выполните команду |
Выберите наименование Pod с наименованием «synapse-trace-select-****», указанное наименование пригодится на следующем шаге (<имя Pod>) |
Проверить работоспособность |
В консоли выполните команду: |
— |
Настройка выделения ресурсов#
С использованием веб-интерфейса Kubernetes
Шаг |
Действие |
|---|---|
Логин в веб-консоль Kubernetes |
Перейдите по ссылке (URL) веб-консоли нужного кластера Kubernetes, в окне ввода учетных данных введите токен пользователя или «kubeconfig» |
Переход в проект |
Выберите нужный проект в выпадающем списке в шапке веб-интерфейса Kubernetes |
Вход в StatefulSet/Deployment |
Выполните следующие действия: |
Скорректировать параметры |
В окне редактирования найдите параметры: |
Сохранение |
Нажмите кнопку «Update» |
Проверка конфигурации |
Снова зайдите на вкладку Edit в YAML или JSON |
Выход из веб-консоли Kubernetes |
Выполните следующие действия: |
Через CLI Kubernetes (kubectl)
Шаг |
Действие |
Описание |
|---|---|---|
Получить текущие StatefulSet/Deployment приложений |
В консоли выполните команду |
— |
Скорректировать параметры |
В консоли выполните команду |
$STATEFULSET_NAME - имя StatefulSet/Deployments |
Проверить конфигурацию |
В консоли выполните команду |
— |
Изменение количества подов#
С использованием веб-интерфейса Kubernetes
Шаг |
Действие |
|---|---|
Вход в веб-консоль Kubernetes |
Перейдите по ссылке (URL) веб-консоли нужного кластера Kubernetes, в окне ввода учетных данных введите токен пользователя или «kubeconfig» |
Переход в нужный проект |
Выберите нужный проект можно в выпадающем списке в шапке веб-интерфейса Kubernetes |
Запуск Pod |
Выполните следующие действия: |
Выход из веб-консоли Kubernetes |
1. Нажмите на имя пользователя, чтобы раскрыть меню учетной записи |
Через CLI Kubernetes (kubectl)
Шаг |
Действия |
Описание |
|---|---|---|
Увеличить/уменьшить количество подов |
В консоли выполните команду: |
— |
Выгрузка системных логов#
С использованием веб-интерфейса Kubernetes
Шаг |
Действие |
|---|---|
Вход в веб-консоль Kubernetes |
Перейдите по ссылке (URL) веб-консоли нужного кластера Kubernetes, в окне ввода учетных данных введите токен пользователя или kubeconfig |
Переход в нужный проект |
Выберите нужный проект в выпадающем списке в шапке веб-интерфейса Kubernetes |
Выгрузить лог |
1. В меню выберите пункт Workload/Pods |
Выход из веб-консоли Kubernetes |
1. Выберите имя пользователя, чтобы раскрыть меню учетной записи |
Через CLI Kubernetes (kubectl)
Шаг |
Действия |
Описание |
|---|---|---|
Выгрузить лог |
В консоли выполните команду: |
— |
Ротация сертификатов#
Для проведения ротации используемых сертификатов необходимо ознакомиться с документацией используемого хранилища (Kubernetes, Vault и т.д.).
Подключение и конфигурирование#
Программный компонент GATM работает в рамках собственной реализации Pod.
Подключение проводится в рамках установки компонента GATM в пользовательский namespace
Конфигурирование проводится посредством реализации scrape конфигурации
Маска конфигурации:
kind: ConfigMap
apiVersion: v1
metadata:
name: synapse-metrics-agent-scrapeconfig
data:
scrape.yml: |
global:
...
scrape_configs:
...
Путь к конфигурационному yaml-файлу указывается в секции spec.containers[@.name="synapse-metrics-agent"].args в Pod агента с помощью флага командной строки -promscrape.config.
Рекомендуемый формат:
args: - '-promscrape.config=/scrapeconfig/scrape.yml'Важно, чтобы ресурс «kind: ConfigMap» был монтирован к подам агента
Agent учитывает следующие разделы из конфигурационного файла в формате Prometheus:
globalscrape_configs
Все остальные разделы игнорируются, включая раздел remote_write.
Информация по формированию конфигурационного файла для scrape метрик
Пример конфигурации: ConfigMap.yml
В рамках сбора прикладных метрик, приложение „Agent“ реализует запросы в рамках конфигураций «kind: Endpoints» и «kind: Service», поиск пользовательских «kind: Pod» реализуется по наличию аннотаций, пример:
kind: Service
apiVersion: v1
metadata:
name: synapse-metrics-storage
annotations:
prometheus.io.path: /metrics # path в рамках которого приложение публикует прикладные метрики
prometheus.io.port: '8482' # port в рамках которого приложение публикует прикладные метрики
prometheus.io.scrape: 'true' # активация сбора прикладных метрик в рамках сервиса
Также нужно предусмотреть наличие ролевой модели в рамках пользовательского проекта (kind: Endpoints, kind: Service, kind: Pod).
В рамках функциональности сбора labels с проектов доступны:
настройка списка проектов для сбора;
настройка конкретных labels для сбора.
Настройка сбора происходит через файл kind: ConfigMap «synapse-metrics-agent-scrapeconfig». Для реализации необходимо добавить специализированную секцию в файл:
kind: ConfigMap
apiVersion: v1
metadata:
name: synapse-metrics-agent-scrapeconfig
data:
scrape.yml: |
global:
...
scrape_configs:
- job_name: job
...
kubernetes_sd_configs:
- role: pod
attach_metadata: # секция для сбора метаданных
namespace: true # сбор метаданных с namespaces
...
Сбор labels с проектов доступен только в рамках сбора прикладных и сетевых метрик и только при наличии соответствующей ролевой модели в рамках пользовательского проекта (kind: Namespace).
При изменении labels в проектах, в которых их сбор уже осуществлен, необходим перезапуск приложения „Agent“ (для изменения набора тегов метрик).
Для реализации отправки метрик и логов в Kafka необходима настройка приложения „Adapter“. В данном приложении возможна настройка «умной» маршрутизации - фильтрация данных и их отправка в разные брокеры и топики Kafka. Для реализации подобного взаимодействия необходимо заполнить специализированный конфигурационный файл «kind: ConfigMap»:
kind: ConfigMap
apiVersion: v1
metadata:
name: synapse-kafka-adapter-routes-config
namespace: <gatm_namespace>
data:
routes.yml: |
connections: # секция с перечислением брокеров Kafka
kafka1: # наименование брокера (может быть произвольным)
batchNumMessages: 5000 # количество сообщений для пакетной записи
brokerList: '<host>:<port>' # хост и порт брокера
compression: none # формат сжатия данных. Доступные значения: none, gzip, snappy, lz4, zstd
kafka2:
batchNumMessages: 5000
brokerList: '<host>:<port>'
compression: none
variables: # секция с перечислением переменных для фильтрации данных
var1: # переменная №1, обозначение секции с параметром может быть любым строковым значением, валидным для ключей map в yaml
name: User-Agent # наименование переменной
type: header # тип переменной. Доступные значения: label, header
var2:
name: job
type: label
var3:
name: namespace
regex: (<reg_expr>) # регулярное выражение для значений переменной, необязательный параметр (по умолчанию «(.*)»). По данному значению будет происходить фильтрация значений для конкретной переменной
type: label
routes: # секция с правилами маршрутизации
kafka1: # правила для брокера kafka1
- delimiter: . # делиметр для отправляемых метрик, необязательный параметр (значение по умолчанию «_», принимает на вход любое значение формата string)
topic: topic1 # наименование топика для отправки метрик
var1: vmagent # значение для переменной var1 из секции «variables»
var3: gatm-test # значение для переменной var3 из секции «variables»
kafka2: # правила для брокера kafka2, имеет аналогичный ряд параметров, как и у брокера kafka1
- topic: topic2
var1: vmagent
var2: istio-pods
- default: true # маршрут по умолчанию
delimiter: .
topic: default-topic
Правила заполнения конфигурации маршрутизации приложения „Adapter“:
в секции «connections» должна быть описана хотя бы одна секция с описанием брокера Kafka;
в секции «variables» должна быть описана хотя бы одна переменная для фильтрации;
в секции «routes» должен быть обязательно прописан маршрут по умолчанию (необходимо прописать параметр «default: true»), маршрут по умолчанию в секции должен быть только один;
если в секции «routes» будут указаны необъявленные брокеры или переменные, Pod приложения „Adapter“ не будет корректно функционировать (из-за невозможности настройки маршрутизации).
Алгоритм работы правил маршрутизации, согласно выше указанному файлу:
для каждого брокера прописываются правила по совпадению значений в тегах метрик или в заголовке запроса (секция «routes»), например:
...
variables:
var1:
name: User-Agent # наименование переменной - User-Agent
type: header # тип переменной - header
var2:
name: job # наименование - job
type: label # тип переменной - label
var3:
name: namespace # наименование - namespace
regex: (ns-test|test-test) # учитываем метрики только из проектов «ns-test» и «test-test»
type: label # тип переменной - label
routes:
kafka1:
- delimiter: . # отправляем метрики с делиметром «.»
topic: gatm-test # отправляем метрики в топик gatm-test
var1: vmagent # отправляем метрики только в том случае, если переменная User-Agent равна значению «vmagent»
var3: ns-test # отправляем метрики только в том случае, если переменная namespace равна значению «ns-test»
...
фильтрация применяется по определенной очередности - сначала во внимание берется количество переменных (от большего к наименьшему) в секции, потом - наименование брокера (по лексикографическому порядку);
при совпадении значений „Adapter“ направляет метрики в нужный топик Kafka;
если ни одно из значений не подошло под условия фильтрации - „Adapter“ отправит метрики в топик, обозначенный как топик по умолчанию.
В рамках поставки компонента GATM передаются бинарные файлы „Agent (logs)“, установка указанного приложения реализуется пользователями посредством добавления контейнера в свои реализации «kind: Deployment».
Для корректного сбора логов с приложения необходимо реализовать передачу прикладных логов в рамках директории Pod в формате JSON.
Пример:
{"event_timestamp":1721667787493,"information":"Принято новое сообщение от: table:80, rqUID: , ","level":"panic","message":"{\"airline\": \"Red Wings\"}","msg":"","operationName":"mapping","traceid":"4a8c1c92041f161800e37bc872ac4281","podSource":"unimapper-5bcf4d5dd9-bckr7","projectName":"project","rqUID":"","serviceReceiver":"table:80","status":"SUCCESS"}
{"event_timestamp":1721667787493,"information":"Отправлено по URL: http://amadeus:8080/search_flight ","level":"panic","message":"{\"airline\": \"Red Wings\"}","msg":"","operationName":"mapping","traceid":"4a8c1c92041f161800e37bc872ac4281","podSource":"unimapper-5bcf4d5dd9-bckr7","projectName":"project","rqUID":"","serviceReceiver":"table:80","status":"SUCCESS"}
{"event_timestamp":1721667787496,"information":"Oшибка отправки запроса: ошибка от редирект сервиса: {\"status\":\"500\",\"error\":\"Internal Server Error\",\"message\":\"Ошибка выполнения запроса. UNEXPECTED_ERROR_ON_EVEN_INDEX=true, включена обработка ошибок. Измените значение на false, чтобы пропускать обработку ошибок\"}, на URL: http://amadeus:8080/search_flight ","level":"panic","message":"{\"airline\": \"Red Wings\"}","msg":"","operationName":"mapping","traceid":"4a8c1c92041f161800e37bc872ac4281","podSource":"unimapper-5bcf4d5dd9-bckr7","projectName":"project","rqUID":"","serviceReceiver":"table:80","status":"ERROR"}
Рекомендуем реализовать передачу тега «»traceid»:»***»», который формируется в рамках входящего запроса и передается в заголовке сообщения (headers), наименование заголовка «x-b3-traceid». Указанный заголовок может показать логи приложения по конкретному запросу.
kind: Deployment
apiVersion: apps/v1
metadata:
name: user-deployment
...
spec:
template:
spec:
securityContext:
runAsNonRoot: true
fsGroup: 1001050000 # указывается при установке в Kubernetes, при установке в Openshift указание секции не требуется
seccompProfile: # указывается при установке в Kubernetes, при установке в Openshift указание секции не требуется
type: RuntimeDefault
containers:
- resources:
limits:
cpu: 400m
memory: 400Mi
requests:
cpu: 300m
memory: 300Mi
readinessProbe:
httpGet:
path: /ready
port: 8081 # порт по пробам параметризуется в рамках ConfigMap приложения Agent (logs)
scheme: HTTP
initialDelaySeconds: 5
timeoutSeconds: 5
periodSeconds: 10
successThreshold: 1
failureThreshold: 30
terminationMessagePath: /dev/termination-log
name: synapse-logs-agent
env: # реализация переменных окружения, для дальнейшего обогащения логов тегами и конкретизацией источника логов
- name: POD_NAMESPACE
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
- name: POD_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: NODE_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: spec.nodeName
- name: POD_IP
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.podIP
- name: NODE_PATH
value: some.value
- name: DEPLOYMENT_NAME
value: user-deployment
securityContext:
capabilities:
drop:
- ALL
privileged: false
runAsUser: 10001 # указывается при установке в Kubernetes, при установке в Openshift указание секции не требуется
runAsGroup: 10001 # указывается при установке в Kubernetes, при установке в Openshift указание секции не требуется
seccompProfile: # указывается при установке в Kubernetes, при установке в Openshift указание секции не требуется
type: RuntimeDefault
runAsNonRoot: true
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false
livenessProbe:
httpGet:
path: /health
port: 8081 # порт по пробам параметризуется в рамках ConfigMap приложения Agent (logs)
scheme: HTTP
initialDelaySeconds: 60
timeoutSeconds: 5
periodSeconds: 10
successThreshold: 1
failureThreshold: 5
imagePullPolicy: Always
volumeMounts:
- name: logs # общая директория, которая монтируется к пользовательскому контейнеру и к Agent (logs), для корректной записи логов и их передачи
mountPath: /var/log/audit
- name: logs-agent-config # монтирование ConfigMap приложения Agent (logs), с настройками запуска
mountPath: /var/logs-agent
terminationMessagePolicy: File
image: >-
${ссылка на image приложений Agent (logs)}
args:
- '--watch-config=poll'
...
- name: user-application
volumeMounts:
- name: logs # общая директория, которая монтируется к пользовательскому контейнеру и к Agent (logs), для корректной записи логов и их передачи
mountPath: /var/log/audit
...
volumes:
- name: logs # реализация общей директории для записи логов
emptyDir: {}
- name: logs-agent-config # объявление ConfigMap для монтирования настроек старта приложения Agent (logs)
configMap:
name: logs-agent-config
defaultMode: 256
Пример конфигурационного файла „Agent (logs)“:
kind: ConfigMap
apiVersion: v1
metadata:
name: logs-agent-config
data:
telegraf.conf: |-
[[inputs.tail]] # сбор логов будет осуществляться из файла
files = ["/var/log/audit/messageslog.log"] # конкретизация файла откуда производится сбор логов
name_override = "myjsonmetric"
data_format = "json" # формат логов в рамках файла сбора
json_string_fields = ["msg", "information", "status"] # конкретизация полей в рамках организованных логов приложения
tag_keys = [ # конкретизация тегов в рамках организованных логов приложения
"level",
"timestamp"
]
[[processors.override]] # генерация дополнительных тегов из переменных окружения с учетом уровня логирования
[processors.override.tags]
logLevel = "info"
namespace = "$POD_NAMESPACE"
podName = "$POD_NAME"
nodeId = "$NODE_NAME"
systemIp = "$POD_IP"
nodePath = "$DEPLOYMENT_NAME.$POD_NAMESPACE"
service = "$DEPLOYMENT_NAME"
[[processors.regex]] # поиск и замена конкретных полей
[[processors.regex.fields]]
key = "status"
pattern = "SUCCESS"
replacement = "200"
[[processors.regex.fields]] # поиск и замена конкретных полей
key = "status"
pattern = "ERROR"
replacement = "500"
[agent]
debug = false # рекомендованные настройки в рамках уровня логирования
interval = "2s" # интервал в рамках которого будет организована передача логов
flush_interval = "2s" # интервал по очитке данных из кеша, после успешной отправки логов, позволяет более эффектино использовать память
[[outputs.loki]] # плагин по передаче логов в рамках краткосрочного хранилища GATM, рекомендуем использовать loki
domain = "${адрес сервиса Insert (logs)}:9428" # адрес краткосрочного хранилища GATM, на сервис Insert (logs)
endpoint = "/insert/loki/api/v1/push?_stream_fields=service&_msg_field=msg" # path, запроса где конкретизируются технические поля GATM (_stream_fields и _msg_field)
Параметры запуска:
[agent]
interval # интервал в рамках которого будет организована передача логов
flush_interval # интервал по очитке данных из кеша, после успешной отправки логов, позволяет более эффектино использовать память
round_interval # округляет интервал сбора данных до interval, т.е. если interval="10 секунд", то сбор данных всегда выполняется на «:00», «:10», «:20» и так далее.
metric_batch_size # определяет размер строки логов, которые Agent (logs) отправляет на сервер
collection_jitter # каждый плагин будет находиться в режиме ожидания в течение случайного времени в пределах джиттера перед сбором. Это может быть использовано для того, чтобы избежать одновременного запроса множества плагинов
precision # собранные показатели округляются до точности, указанной в виде int
debug # ведение журнала на уровне отладки
quiet # ведение журнала только для сообщений об ошибках
logfile # имя файла, в который будет производиться запись при использовании лог-таргета "file". Если задана пустая строка, то журналы записываются в stderr
logfile_rotation_interval # время ротации журнала. Если установлено значение 0, то изменение по времени не выполняется
logfile_rotation_max_size # ротация в рамках объема. Если установлено значение 0, вращение в зависимости от размера не выполняется
# плагины
[[outputs.health]]
service_address = "http://:8081" # настройка порта для liveness/readness проб
[[inputs.tail]]
files # путь к файлу с логами, поддерживаются регулярные выражения
from_beginning # чтение файла с самого начала, логика старта после перегрузки контейнера Agent (logs)
watch_method # метод, используемый для отслеживания обновлений файлов. Может быть как "inotify", так и "poll"
max_undelivered_lines # максимальное количество строк файла для обработки, которые еще не были записаны
character_encoding # кодировка символов, используемая при интерпретации содержимого файла «utf-8», utf-16le и так далее
data_format # формат логов в рамках директории с файлом логов «json», «csv», «json_v2», «logfmt», «prometheus»
path_tag # тег, который будет содержать путь к завершенному файлу. Если вам не нужен этот тег, замените его пустой строкой
[[outputs.loki]]
domain # адрес сервера для записи
endpoint # path для записи на сервер
timeout # время ожидания при отправке логов
http_headers # расширение заголовков при отправке логов, пример «{"X-Scope-OrgID" = "1"}»
gzip_request # кодировка в gzip (true/false)
tls_ca # настройки TLS, указание пути к файлу «ca» в рамках Pod
tls_cert # настройки TLS, указание пути к файлу «cert» в рамках Pod
tls_key # настройки TLS, указание пути к файлу «key» в рамках Pod
[[outputs.kafka]]
brokers # список брокеров
topic # топик
version # установите минимальную поддерживаемую версию Kafka. Эта настройка позволяет использовать новые функции и API-интерфейсы. Требуется версия не менее 0.10.0.0
routing_tag # тег routing определяет ключ-метрику в метрике, значение которого используется в качестве ключа сообщения. Ключ message используется для определения того, в какой раздел отправлять сообщение
idempotent_writes # идемпотентная запись, если она включена, записывается ровно одна копия каждого сообщения
max_retry # количество повторных попыток
max_message_bytes # максимальный размер сообщения при отправке
enable_tls # использование TLS (true/false)
tls_ca # настройки TLS, указание пути к файлу «ca» в рамках Pod
tls_cert # настройки TLS, указание пути к файлу «cert» в рамках Pod
tls_key # настройки TLS, указание пути к файлу «key» в рамках Pod
insecure_skip_verify # проверка цепочки сертификатов (true/false)
keep_alive_period # настройка времени соединения без запросов (15s)
# плагин для организации интеграционного журнала (автоматическая сортировка логов в зависимости от взаимодействия (например, path запрос или любой другой идентификатор)), рекомендуем реализовать не более 12 тенантов
[[outputs.gatm_logs_journal]]
domain = "https://synapse-logs-insert.kubernetes.ru" # адрес для записи интеграционных логов
endpoint = "/insert/loki/api/v1/push?_stream_fields=service&_msg_field=msg" # path для записи на сервер
data_format = "json_line" # запись в рамках построчной записи JSON
json_account_field = "path" # в рамках записи логи записываются в рамках тенанта, который состоит из 2х идентификаторов, первый это имя проекта, второй выбирает пользователь (например, в рамках проекта мы хотим записывать в рамках отдельного тенанта все path запросы)
# настройка TLS, при обновлении сертификатов будет производиться обновление, указывается путь к сертификатам в рамках Pod
tls_ca = "/var/logs/certs/ca.crt"
tls_cert = "/var/logs/certs/tls.crt"
tls_key = "/var/logs/certs/tls.key"
insecure_skip_verify = true
# также в рамках плагина outputs.gatm_logs_journal необходимо корректно организовать сбор логов из приложения IGEG. Пример конфигурации в конце указанного раздела.
# кастомизированный плагин elasticsearch для отправки логов через формат, аналогичный filebeat
[[outputs.synapse_elasticsearch]]
urls = [ "http://your.host.for.logs:8080/" ] # хост для отправки логов
timeout = "5s" # таймаут клиента
health_check_interval = "10s" # интервал для проверки доступности нод Elasticsearch
index_name = "filebeat-7.6.2-%Y.%m.%d" # метаинформация (значение поля не рекомендуется изменять), обязательное
use_optype_create = true # флаг для изменения метода добавления лога (если значение = true, метод будет изменен с insert на create)
simulate_filebeat = true # флаг для добавления в сообщение его метаданных (если значение = true, метаданные будут добавлены)
full_meta = false # флаг для управления полнотой метаданных (если значение = true, все метаданные будут добавлены в сообщение, если значение = false - в сообщение будет добавлен минимальный набор метаинформации)
startup_error_behavior = "retry" # параметр для управления работой плагина в случае, если удаленный ресурс для отправки логов будет недоступен (если значение = retry (рекомендуется использование данного значения), плагин будет работать даже в случае недоступности удаленного ресурса). Доступные значения для заполнения - error (значение по умолчанию), ignore
# решение базируется на ряде плагинов, с которыми можно ознакомиться на сайте telegraf. Ниже будут перечислены доступные плагины
[[outputs.*]] # список плагинов outputs. Более подробно ознакомится можно в документе «Руководство по установке»
discard
file
health
http
kafka
loki
[[inputs.*]] # список плагинов inputs. Более подробно ознакомится можно в документе «Руководство по установке»
file
http
http_listener_v2
http_response
internal
tail
[[processors.*]] # список плагинов processors. Более подробно ознакомится можно в документе «Руководство по установке»
converter
date
dedup
defaults
enum
filter
override
parser
regex
rename
template
[[aggregators.*]] # список плагинов aggregators. Более подробно ознакомится можно в документе «Руководство по установке»
basicstats
derivative
final
histogram
merge
minmax
quantile
starlark
valuecounter
[[parsers.*]] # список плагинов parsers. Более подробно ознакомится можно в документе «Руководство по установке»
avro
binary
collectd
csv
dropwizard
form_urlencoded
graphite
grok
influx
json
json_v2
logfmt
opentsdb
prometheus
prometheusremotewrite
value
wavefront
xpath
[[serializers.*]] # список плагинов serializers. Более подробно ознакомится можно в документе «Руководство по установке»
binary
carbon2
cloudevents
csv
graphite
influx
json
msgpack
nowmetric
prometheus
prometheusremotewrite
splunkmetric
template
wavefront
Пример конфигурационного файла event-exporter (kind: ConfigMap) с функцией мониторинга конфигураций:
kind: ConfigMap
apiVersion: v1
metadata:
name: synapse-metrics-event-exporter-watch-env
namespace: synapse-metrics-system
data:
config.yaml: |
global:
check_interval: 10s
jobs:
- job_name: istiod_readiness_probe_initial_delay_seconds # создаем метрику с наименованием
kind: Pod
apiVersion: v1
labelSelector:
matchExpressions: # метрика будет формироваться только в рамках «kind: Pod» с меток «app: istiod»
- key: app
operator: In
values:
- istiod
namespaces: # поиск «kind: Pod» будет производиться только в рамках проекта istio-system (ВАЖНО! Необходимо дать права ServiceAccount приложения event-exporter на get, list, watch конфигураций Pod)
names:
- istio-system
tags:
- name: initialDelaySeconds # метка в рамках формирования метрики
path: spec.containers[?name == 'discovery'].readinessProbe.initialDelaySeconds # JMES запрос в рамках «kind: Pod»
- name: statusPod # метка в рамках формирования метрики
path: status.phase # JMES запрос в рамках «kind: Pod»
Сформированную метрику можно увидеть при запросе метрик приложения event-exporter (curl localhost:9102/metrics).
Ожидаемый результат:
istiod_readiness_probe_initial_delay_seconds{initialDelaySeconds="5",metadata_name="istiod-istio-system-656dfb8bf7-v8zs5",metadata_namespace="istio-system",phasestatus="",statusPod="Running"} 1
istiod_readiness_probe_initial_delay_seconds{initialDelaySeconds="5",metadata_name="istiod-istio-system-656dfb8bf7-zx2cb",metadata_namespace="istio-system",phasestatus="",statusPod="Running"} 1
istiod_readiness_probe_initial_delay_seconds{delete_date="2024-09-30 07:16:20 +0000 UTC",initialDelaySeconds="5",metadata_name="istiod-istio-system-656dfb8bf7-rqnqv",metadata_namespace="istio-system",statusPod="Running"} 0
istiod_readiness_probe_initial_delay_seconds{delete_date="2024-09-30 17:03:04 +0000 UTC",initialDelaySeconds="5",metadata_name="istiod-istio-system-656dfb8bf7-cv7nc",metadata_namespace="istio-system"statusPod="Running"} 0
В рамках примера визуализируются метрики, которые сформированы при мониторинге конфигураций, значение 0 означает, что конфигурация была удалена.
В рамках минимизации рисков по передаче чувствительных данных в метриках, в структуре метрик не формируются секции args, command и env.
Также можно настраивать диапазон хранения метрик при помощи настройки «configTTL», например «10m», тем самым метрики будут визуализироваться в рамках 10 минут после события.
Также в рамках файла «synapse-metrics-event-exporter-env» (kind: ConfigMap) есть возможность указать следующие параметры:
EVENT_TTL: '15' # время в минутах, через которое событие считается устаревшим
EVENT_TTL_CHECK_INTERVAL: '30' # интервал (в секундах) для периодической очистки от устаревших событий
IGNORE_NULLTIME: 'false' # флаг, управляющий поведением в ситуации, когда у события неизвестно время последнего наблюдения (по умолчанию = false). При значении true событие запишется в метрики, но удалится при ближайшей чистке, при значении false событие запишется с текущим временем
RESYNC_INTERVAL: '5' # периодичность принудительной очистки кеша приложения Event Exporter в минутах
Параметр EVENT_TTL позволяет задать период, в течение которого событие локально считается устаревшим и будет удалено через временной интервал EVENT_TTL_CHECK_INTERVAL после данного момента. Например, если значение EVENT_TTL равно „15“, а значение EVENT_TTL_CHECK_INTERVAL равно „30“, спустя 15 минут после появления данного события оно будет «отмечено» как устаревшее и будет удалено еще через 30 секунд (до преобразования «kind: Event» в метрику).
IGNORE_NULLTIME позволяет оперировать параметром timestamp в «kind: Event» в случае, если время последнего наблюдения события - unknown. Если пользователю необходимо сохранить все возможные события в рамках заданного EVENT_TTL, рекомендуется использовать значение false, при котором такие события сохранятся с timestamp, равным моменту времени записи события.
При заполнении выше указанных параметров необходимо также учитывать RESYNC_INTERVAL, который задает период принудительной очистки кэша приложения Event Exporter. В случае, если данный параметр будет очень маленьким (например, 1 минута), есть риск потери части данных в рамках процесса мониторинга событий.
Пример организации данных для интеграционного журнала.
# при необходимости провести сбор дополнительных секций в рамках лога, таких как тело запроса и заголовки (далее нужно будет определить фильтр, какие именно логи попадут в интеграционный журнал)
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: request-response-filter
spec:
configPatches:
- applyTo: HTTP_FILTER
match:
context: ANY
listener:
filterChain:
filter:
name: envoy.filters.network.http_connection_manager
subFilter:
name: envoy.filters.http.router
patch:
operation: INSERT_BEFORE
value:
name: envoy.lua
typed_config:
'@type': type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua
inlineCode: |
function envoy_on_request(request_handle)
local headers = request_handle:headers()
local headersMap = {}
for key, value in pairs(headers) do
headersMap[key] = value
end
request_handle:streamInfo():dynamicMetadata():set("envoy.lua","request_headers",headersMap)
local requestBody = ""
for chunk in request_handle:bodyChunks() do
if (chunk:length() > 0) then
requestBody = requestBody .. chunk:getBytes(0, chunk:length())
end
end
request_handle:streamInfo():dynamicMetadata():set("envoy.lua","request_body",requestBody)
end
workloadSelector:
labels:
app: ingw-pharmacy-sales-demo
Формирование состава логов.
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: format-journal
spec:
configPatches:
- applyTo: NETWORK_FILTER
match:
context: ANY
listener:
filterChain:
filter:
name: envoy.filters.network.http_connection_manager
patch:
operation: MERGE
value:
name: envoy.filters.network.http_connection_manager
typed_config:
'@type': >-
type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
access_log:
- name: envoy.access_loggers.file
typedConfig:
'@type': >-
type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog
logFormat:
json_format:
traceid: '%REQ(x-b3-traceid)%'
method: '%REQ(:METHOD)%'
msg: >-
%BYTES_RECEIVED% - %BYTES_SENT% - %RESPONSE_FLAGS% -
%RESPONSE_CODE_DETAILS% -
%UPSTREAM_TRANSPORT_FAILURE_REASON% - %ROUTE_NAME%
body: '%DYNAMIC_METADATA(envoy.lua:request_body)%'
authority: '%REQ(:AUTHORITY)%'
path: '%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%'
scheme: '%REQ(:SCHEME)%'
headers: '%DYNAMIC_METADATA(envoy.lua:request_headers)%'
requestid: '%REQ(X-REQUEST-ID)%'
outbound: '%UPSTREAM_CLUSTER%'
status: '%RESPONSE_CODE%'
external-address: '%REQ(:AUTHORITY)%%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%'
duration: '%DURATION%'
start-time: '%START_TIME%'
protocol: '%PROTOCOL%'
path: /var/log/audit/access_logs.log
workloadSelector:
labels:
app: ingw-pharmacy-sales-demo
С пояснениями в рамках полей можно ознакомиться в документации IGEG (в документе «Руководство по системному администрированию»), либо Istio (описание конфигурации «Envoy Filter» в разделе «Traffic Management»).
Фильтр заголовков (headers), которые будут записываться в рамках хранилища Synapse „logs“ „storage“, формируется в рамках ConfigMap Synapse „logs“ „agent“:
[[inputs.tail]]
files = ["/var/log/audit/access_logs.log"]
name_override = "journal"
path_tag = ""
data_format = "json"
json_string_fields = ["msg"]
tag_keys = ["method","start-time","headers_content-type","headers_accept-encoding","headers_x-request-id","requestid","scheme","duration","content-type","external-address","path","authority","protocol","outbound","status","traceid","body","integration","namespace","podName","service"]
Пример заголовка «headers_content-type» - при передаче логов заголовок «content-type» будет записан в отдельный тег «headers_content-type», что позволит в дальнейшем использовать его при необходимости переотправки сообщения.
Также есть возможность настроить планировщик заданий, который реализуется в рамках CronJob, конфигурации по установке учтены в рамках передачи компонента клиентам.
Пример ConfigMap планировщика заданий:
kind: ConfigMap
apiVersion: v1
metadata:
name: sender-job-config
data:
config.yaml: >
periodQuery: 59m # за какой период будем искать записи
query: # запрос по полям логов в рамках интеграционного журнала
status: 500
accountNames: # интеграционный идентификатор, в рамках которого будет производиться поиск, первый идентификатор это имя проекта, где устанавливается планировщик заданий
- /order/new
- /jojo
limit: 10 # лимит в рамках выборки сообщения, будем переотправлять только 10 записей
tps: 1 # ограничение в рамках переотправки сообщений
address-logs-server: synapse-logs-select:9499/select/logsql/query # сервер synapse logs
headers: # опционально, можно указать заголовки для идентификации инициации сообщений от планировщика заданий
- name: x-header
value: please
События системного журнала#
Системный лог выводится в консоль контейнера приложения.
„Agent“#
Уровни логирования INFO, WARN, ERROR, FATAL или PANIC. Уровень логирования задается при старте приложения в spec.template.spec.containers[0].args, в statefulset.
„-loggerLevel=<уровень>“
Минимальный уровень ошибок для вывода. Возможные значения: INFO, WARN, ERROR, FATAL, PANIC (по умолчанию: «INFO»).
Наименование контейнера в рамках «kind: Pod» — synapse-metrics-agent.
Разворачивание среды
2023-01-26T14:20:30.718Z info ***/lib/logger/flag.go:12 build version: vmagent-20221115-121853-heads-master-0-g39fc90dbf-dirty-5d654ac2
2023-01-26T14:20:30.718Z info ***/lib/logger/flag.go:13 command-line flags
2023-01-26T14:20:30.718Z info ***/lib/logger/flag.go:20 -promscrape.cluster.memberNum="synapse-metrics-agent-0"
2023-01-26T14:20:30.718Z info ***/lib/logger/flag.go:20 -promscrape.cluster.membersCount="2"
2023-01-26T14:20:30.718Z info ***/lib/logger/flag.go:20 -promscrape.cluster.name="synapse-metrics-agent-0-tribe-sy-fssm-dev"
2023-01-26T14:20:30.718Z info ***/lib/logger/flag.go:20 -promscrape.config="/scrapeconfig/scrape.yml"
2023-01-26T14:20:30.718Z info ***/lib/logger/flag.go:20 -promscrape.suppressDuplicateScrapeTargetErrors="true"
2023-01-26T14:20:30.718Z info ***/lib/logger/flag.go:20 -remoteWrite.url="secret"
2023-01-26T14:20:30.718Z info ***/app/vmagent/main.go:103 starting vmagent at ":8429"...
2023-01-26T14:20:30.718Z info ***/lib/memory/memory.go:42 limiting caches to 188743680 bytes, leaving 125829120 bytes to the OS according to -memory.allowedPercent=60
2023-01-26T14:20:30.721Z info ***/lib/persistentqueue/fastqueue.go:59 opened fast persistent queue at "vmagent-remotewrite-data/persistent-queue/1_AA191EE87E52329A" with maxInmemoryBlocks=188, it contains 0 pending bytes
2023-01-26T14:20:30.722Z info ***/app/vmagent/remotewrite/client.go:169 initialized client for -remoteWrite.url="1:secret-url"
2023-01-26T14:20:30.722Z info ***/app/vmagent/main.go:130 started vmagent in 0.004 seconds
2023-01-26T14:20:30.722Z info ***/lib/httpserver/httpserver.go:96 starting http server at http://*.*.*.*:8429/
2023-01-26T14:20:30.722Z info ***/lib/httpserver/httpserver.go:97 pprof handlers are exposed at http://*.*.*.*:8429/debug/pprof/
2023-01-26T14:20:30.723Z info ***/lib/promscrape/scraper.go:106 reading Prometheus configs from "/scrapeconfig/scrape.yml"
2023-01-26T14:20:30.725Z info ***/lib/promscrape/config.go:120 starting service discovery routines...
2023-01-26T14:20:30.775Z info ***/lib/promscrape/discovery/kubernetes/api_watcher.go:501 started pod watcher for "https://kubernetes.default.svc.cluster.local:443/api/v1/namespaces/tribe-sy-fssm-dev/pods"
2023-01-26T14:20:30.783Z info ***/lib/promscrape/config.go:126 started service discovery routines in 0.058 seconds
Параметры запуска
{"ts":"2023-07-18T14:22:10.056Z","level":"info","caller":"**/lib/logger/flag.go:13","msg":"command-line flags"}
{"ts":"2023-07-18T14:22:10.056Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -cacheDataPath=\"/cache\""}
{"ts":"2023-07-18T14:22:10.056Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -dedup.minScrapeInterval=\"1m0s\""}
{"ts":"2023-07-18T14:22:10.056Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -envflag.enable=\"true\""}
{"ts":"2023-07-18T14:22:10.056Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -envflag.prefix=\"GATM_\""}
{"ts":"2023-07-18T14:22:10.056Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -loggerFormat=\"json\""}
{"ts":"2023-07-18T14:22:10.056Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -loggerLevel=\"INFO\""}
Успешный запрос в рамках приложения
{"ts":"2023-07-24T05:58:51.167Z","level":"info","caller":"**/app/vmselect/querystats/querystats.go:87","msg":"enabled query stats tracking at `/api/v1/status/top_queries` with -search.queryStats.lastQueriesCount=20000, -search.queryStats.minQueryDuration=1ms"}
Информация о захвате целей для сбора метрик
2023-01-26T14:20:45.834Z info ***/lib/promscrape/discovery/kubernetes/api_watcher.go:633 reloaded 6 objects from "https://kubernetes.default.svc.cluster.local:443/api/v1/namespaces/tribe-sy-fssm-dev/pods" in 0.030s; updated=0, removed=0, added=6, resourceVersion="1361161414"
2023-01-26T14:21:00.784Z info ***/lib/promscrape/scraper.go:403 kubernetes_sd_configs: added targets: 6, removed targets: 0; total targets: 6
Информация об удалении цели для сбора метрик
2023-01-27T07:59:13.418Z info ***/lib/promscrape/scraper.go:403 kubernetes_sd_configs: added targets: 0, removed targets: 1; total targets: 5
Предупреждение о недоступности цели для сбора метрик
2023-01-27T07:58:29.731Z warn ***/lib/promscrape/scrapework.go:390 cannot scrape "http://*.*.*.*:15020/stats/prometheus" (job "istio-pods", labels {instance="192.*.55.81:15020",job="istio-pods"}): error when scraping "http://*.*.*.*:15020/stats/prometheus": unexpected EOF
Предупреждение о недоступности сервера, в рамках передачи метрик
2023-04-05T05:15:33.894Z warn ***/app/smagent/remotewrite/client.go:333 couldn't send a block with size 27416 bytes to "1:secret-url": Post "http://localhost:8081/receive": dial tcp4 127.*.0.1:8081: connect: connection refused; re-sending the block in 2.000 seconds
Ошибки при обращении к KubeAPI, недоступность сервиса
2023-03-31T18:20:30.533Z error ***/lib/promscrape/discovery/kubernetes/api_watcher.go:690 error when reading WatchEvent stream from "https://kubernetes.default.svc.cluster.local:443/api/v1/namespaces/federation-istio-system/pods?watch=1&allowWatchBookmarks=true&timeoutSeconds=1620&resourceVersion=163285310": cannot parse WatchEvent json response: unexpected EOF
2023-01-26T14:20:30.782Z error ***/lib/promscrape/discovery/kubernetes/api_watcher.go:578 cannot perform request to "https://kubernetes.default.svc.cluster.local:443/api/v1/namespaces/tribe-sy-fssm-dev/pods": Get "https://kubernetes.default.svc.cluster.local:443/api/v1/namespaces/tribe-sy-fssm-dev/pods": dial tcp 192.*.0.1:443: connect: connection refused
Ошибки при обращении к KubeAPI, недостаточно прав для запроса
2023-04-04T17:19:46.409Z error ***/lib/promscrape/discovery/kubernetes/api_watcher.go:584 unexpected status code for request to "https://kubernetes.default.svc.cluster.local:443/api/v1/namespaces/federation-istio-system/pods": 403; want 200; response: "{\"kind\":\"Status\",\"apiVersion\":\"v1\",\"metadata\":{},\"status\":\"Failure\",\"message\":\"pods is forbidden: User \\\"system:serviceaccount:synapse-metrics-system:synapse-metrics-sa\\\" cannot list resource \\\"pods\\\" in API group \\\"\\\" in the namespace \\\"federation-istio-system\\\"\",\"reason\":\"Forbidden\",\"details\":{\"kind\":\"pods\"},\"code\":403}\
В рамках ошибок сетевого взаимодействия необходимо ознакомиться с документацией компонентов SVPX / IGEG «Руководство прикладного разработчика», раздел «Часто встречающиеся проблемы и пути их устранения».
Ошибка в рамках обращения к „storage“
{"ts":"2023-07-24T06:00:34.141Z","level":"warn","caller":"**/app/vmselect/main.go:451","msg":"error in \"/select/0/prometheus/api/v1/query # далее описывается причина ошибки
Ошибки могут быть связаны с временной недоступностью приложения „storage“.
Kafka „Adapter“#
Уровни логирования DEBUG, INFO, WARN, ERROR, FATAL или PANIC. Уровень логирования задается при старте приложения в настройках «kind: ConfigMap». Уровень по умолчанию: INFO. Уровень логирования устанавливает администратор данного компонента.
Уровень логирования DEBUG не рекомендован для ПРОМ среды.
Наименование контейнера в рамках «kind: Pod» — synapse-kafka-adapter.
Подключение к Kafka
time="2023-01-27T11:24:07Z" level=info msg="creating kafka producer" source="main.go:29"
Информирование о режиме работы умной маршрутизации
{"level":"info","msg":"Working in route mode","time":"2025-04-03T10:31:22Z"}
Информирование о редактировании конфигурации с маршрутизацией
{"level":"info","msg":"file updated /var/adapter/config/routes.yml","time":"2025-04-03T11:07:43Z"}
Логирование об обработке метрики
{"fields.time":"2023-01-27T11:24:53Z","ip":"*.*.*.*","latency":308830,"level":"info","method":"POST","msg":"","path":"/receive","status":200,"time":"2023-01-27T11:24:53Z","user-agent":"vmagent"}
{"fields.time":"2023-01-27T11:25:00Z","ip":"*.*.*.*","latency":208489,"level":"info","method":"POST","msg":"","path":"/receive","status":200,"time":"2023-01-27T11:25:00Z","user-agent":"vmagent"}
Информирование об ошибке соединения с Kafka
%6|1674861433.494|FAIL|rdkafka#producer-1| [thrd:broker.ru:9093/bootstrap]: broker.ru:9093/24: Disconnected while requesting ApiVersion: might be caused by incorrect security.protocol configuration (connecting to a SSL listener?) or broker version is < 0.10 (see api.version.request) (after 0ms in state APIVERSION_QUERY, 3 identical error(s) suppressed)
Информирование об ошибке Kafka
%6|1680671954.839|FAIL|rdkafka#producer-1| [thrd:*.*.*.*:30492/bootstrap]: *.*.*.*:30492/0: Disconnected (after 58058ms in state UP
Информирование об ошибке применения конфигурации с умной маршрутизацией
Ошибка возникает при включении в конфигурацию правила маршрутизации для брокера, необъявленного в секции «connections».
{"error":"destination is not defined","level":"error","msg":"cant reload config","time":"2025-04-03T11:07:43Z"}
Информирование об ошибке применения конфигурации с умной маршрутизацией
Ошибка возникает при включении в конфигурацию правила маршрутизации для переменной, необъявленной в секции «variables».
{"error":"config contains unknown variables","level":"error","msg":"cant reload config","time":"2025-04-03T11:07:43Z"}
Информирование о настройках подключения к KFGT (Компонент Kafka шлюз)
{"level":"info","msg":"KFGT_INTEGRATION: true, creating HTTP adapter","time":"***"}
{"level":"info","msg":"KFGT_PROTO: HTTP","time":"***"}
{"level":"info","msg":"KFGT_URL: http://{АДРЕС_KFGT}}:8080/_bulk","time":"***"}
В рамках ошибок сетевого взаимодействия необходимо ознакомиться с документацией компонентов SVPX / IGEG «Руководство прикладного разработчика», раздел «Часто встречающиеся проблемы и пути их устранения».
Event Exporter#
Уровни логирования DEBUG, INFO, WARN, ERROR, FATAL или PANIC. Уровень логирования задается при старте приложения в настройках «kind: ConfigMap». Уровень по умолчанию: INFO. Уровень логирования устанавливает администратор данного компонента.
Уровень логирования DEBUG не рекомендован для ПРОМ среды.
Наименование контейнера в рамках «kind: Pod» — synapse-metrics-event-exporter.
Разворачивание среды
W0724 05:39:12.660130 1 client_config.go:618] Neither --kubeconfig nor --master was specified. Using the inClusterConfig. This might not work.
I0724 05:39:12.660743 1 main.go:89] starting prometheus metrics server on http://localhost:9102
I0724 05:39:12.660824 1 event.go:91] [synapse-metrics-system] starting eventCollector
I0724 05:39:31.661945 1 event.go:95] [synapse-metrics-system] started
Ошибки при обращении в Kube API server
W0724 05:39:12.665602 1 reflector.go:533] pkg/mod/k8s.io/client-go@v0.27.3/tools/cache/reflector.go:231: failed to list *v1.Event: Get "https://kubernetes.default.svc.cluster.local:443/api/v1/namespaces/synapse-metrics-system/events?limit=500&resourceVersion=0": dial tcp **.**.*.*:443: connect: connection refused
E0724 05:39:12.665680 1 reflector.go:148] pkg/mod/k8s.io/client-go@v0.27.3/tools/cache/reflector.go:231: Failed to watch *v1.Event: failed to list *v1.Event: Get "https://kubernetes.default.svc.cluster.local:443/api/v1/namespaces/synapse-metrics-system/events?limit=500&resourceVersion=0": dial tcp **.**.*.*:443: connect: connection refused
W0724 05:39:13.951826 1 reflector.go:533] pkg/mod/k8s.io/client-go@v0.27.3/tools/cache/reflector.go:231: failed to list *v1.Event: Get "https://kubernetes.default.svc.cluster.local:443/api/v1/namespaces/synapse-metrics-system/events?limit=500&resourceVersion=0": dial tcp **.**.*.*:443: connect: connection refused
E0724 05:39:13.951897 1 reflector.go:148] pkg/mod/k8s.io/client-go@v0.27.3/tools/cache/reflector.go:231: Failed to watch *v1.Event: failed to list *v1.Event: Get "https://kubernetes.default.svc.cluster.local:443/api/v1/namespaces/synapse-metrics-system/events?limit=500&resourceVersion=0": dial tcp **.**.*.*:443: connect: connection refused
Допустимо получать указанные ошибки при старте приложения при медленном старте контейнера «istio-proxy», что реализует блокирование запросов.
Формирование метрик по событиям
I0724 07:03:39.435555 1 event.go:165] [synapse-metrics-system] event name: synapse-metrics-event-exporter-7776b8c97-cm4cq.1774bbc1ad2db7b6,count: 1,involvedObject_namespace: synapse-metrics-system,involvedObject_kind: Pod,involvedObject_name: synapse-metrics-event-exporter-7776b8c97-cm4cq,reason: Started,type: Normal
I0724 07:03:39.435587 1 event.go:165] [synapse-metrics-system] event name: synapse-metrics-event-exporter-7776b8c97-cm4cq.1774bbc1ff1ce991,count: 11,involvedObject_namespace: synapse-metrics-system,involvedObject_kind: Pod,involvedObject_name: synapse-metrics-event-exporter-7776b8c97-cm4cq,reason: Unhealthy,type: Warning
I0724 07:03:39.435626 1 event.go:165] [synapse-metrics-system] event name: synapse-metrics-event-exporter-7776b8c97-hmz58.1774b72a78095048,count: 18,involvedObject_namespace: synapse-metrics-system,involvedObject_kind: Pod,involvedObject_name: synapse-metrics-event-exporter-7776b8c97-hmz58,reason: Unhealthy,type: Warning
I0724 07:03:39.435662 1 event.go:165] [synapse-metrics-system] event name: synapse-metrics-event-exporter-7776b8c97-hmz58.1774bbc14ba1a347,count: 1,involvedObject_namespace: synapse-metrics-system,involvedObject_kind: Pod,involvedObject_name: synapse-metrics-event-exporter-7776b8c97-hmz58,reason: Killing,type: Normal
Запуск функции по мониторингу конфигураций «kind: Pod»
I0930 07:13:04.522711 1 config.go:168] configuration process: new job added: name: ${NAME_JOBS1}
I0930 07:13:04.522721 1 config.go:168] configuration process: new job added: name: ${NAME_JOBS2}
I0930 07:13:04.522763 1 checker.go:60] resource checker started sucesfully with 2 jobs
Обработка событий по мониторингу конфигураций «kind: Pod»
I0930 07:15:26.213678 1 watch_handlers.go:114] Object(Deleted) Updated in Store: istio-system/istiod-istio-system-656dfb8bf7-rqnqv
I0930 07:15:26.213700 1 watch_handlers.go:117] Object moved to Deleted Store: istio-system/istiod-istio-system-656dfb8bf7-rqnqv
I0930 07:15:26.246980 1 watch_handlers.go:32] Object Added in Store: istio-system/istiod-istio-system-656dfb8bf7-cv7nc
I0930 07:15:26.257331 1 watch_handlers.go:83] Object Updated in Store: istio-system/istiod-istio-system-656dfb8bf7-cv7nc
I0930 07:15:26.278148 1 watch_handlers.go:83] Object Updated in Store: istio-system/istiod-istio-system-656dfb8bf7-cv7nc
I0930 07:15:26.802236 1 watch_handlers.go:83] Object Updated in Store: istio-system/istiod-istio-system-656dfb8bf7-cv7nc
I0930 07:15:27.019331 1 watch_handlers.go:110] Object(Deleted) Updated in Store: istio-system/istiod-istio-system-656dfb8bf7-rqnqv
I0930 07:15:27.019355 1 watch_handlers.go:117] Object moved to Deleted Store: istio-system/istiod-istio-system-656dfb8bf7-rqnqv
I0930 07:15:28.065623 1 watch_handlers.go:83] Object Updated in Store: istio-system/istiod-istio-system-656dfb8bf7-cv7nc
I0930 07:15:32.073032 1 watch_handlers.go:110] Object(Deleted) Updated in Store: istio-system/istiod-istio-system-656dfb8bf7-rqnqv
I0930 07:15:32.073062 1 watch_handlers.go:117] Object moved to Deleted Store: istio-system/istiod-istio-system-656dfb8bf7-rqnqv
Select#
Уровни логирования DEBUG, INFO, WARN, ERROR, FATAL или PANIC. Уровень логирования задается при старте приложения в настройках «kind: ConfigMap». Уровень по умолчанию: INFO. Уровень логирования устанавливает администратор данного компонента.
Уровень логирования DEBUG не рекомендован для ПРОМ среды.
Наименование контейнера в рамках «kind: Pod» — synapse-metrics-select.
Разворачивание среды
{"ts":"2023-07-18T14:22:10.056Z","level":"info","caller":"**/lib/logger/flag.go:12","msg":"build version: vmselect-20230718-053115-heads-test-build-bin-0-g2ee14fe1e"}
{"ts":"2023-07-18T14:22:10.056Z","level":"info","caller":"**/lib/logger/flag.go:13","msg":"command-line flags"}
{"ts":"2023-07-18T14:22:10.056Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -cacheDataPath=\"/cache\""}
{"ts":"2023-07-18T14:22:10.056Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -dedup.minScrapeInterval=\"1m0s\""}
{"ts":"2023-07-18T14:22:10.056Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -envflag.enable=\"true\""}
{"ts":"2023-07-18T14:22:10.056Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -envflag.prefix=\"GATM_\""}
{"ts":"2023-07-18T14:22:10.056Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -loggerFormat=\"json\""}
{"ts":"2023-07-18T14:22:10.056Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -loggerLevel=\"INFO\""}
{"ts":"2023-07-18T14:22:10.056Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -storageNode=\"synapse-metrics-storage-0.synapse-metrics-storage.synapse-metrics-system.svc.cluster.local:8401\""}
{"ts":"2023-07-18T14:22:10.056Z","level":"info","caller":"**/app/vmselect/main.go:95","msg":"starting netstorage at storageNodes [synapse-metrics-storage-0.synapse-metrics-storage.synapse-metrics-system.svc.cluster.local:8401]"}
{"ts":"2023-07-18T14:22:10.058Z","level":"info","caller":"**/app/vmselect/main.go:109","msg":"started netstorage in 0.002 seconds"}
{"ts":"2023-07-18T14:22:10.059Z","level":"info","caller":"**/lib/memory/memory.go:42","msg":"limiting caches to 188743680 bytes, leaving 125829120 bytes to the OS according to -memory.allowedPercent=60"}
{"ts":"2023-07-18T14:22:10.059Z","level":"info","caller":"**/app/vmselect/promql/rollup_result_cache.go:66","msg":"loading rollupResult cache from \"/cache/rollupResult\"..."}
{"ts":"2023-07-18T14:22:10.060Z","level":"info","caller":"**/app/vmselect/promql/rollup_result_cache.go:94","msg":"loaded rollupResult cache from \"/cache/rollupResult\" in 0.001 seconds; entriesCount: 0, sizeBytes: 0"}
{"ts":"2023-07-18T14:22:10.060Z","level":"info","caller":"**/lib/httpserver/httpserver.go:96","msg":"starting http server at http://*.*.*.*:8481/"}
{"ts":"2023-07-18T14:22:10.061Z","level":"info","caller":"**/lib/httpserver/httpserver.go:97","msg":"pprof handlers are exposed at http://*.*.*.*:8481/debug/pprof/"}
Параметры запуска
{"ts":"2023-07-18T14:22:10.056Z","level":"info","caller":"**/lib/logger/flag.go:13","msg":"command-line flags"}
{"ts":"2023-07-18T14:22:10.056Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -cacheDataPath=\"/cache\""}
{"ts":"2023-07-18T14:22:10.056Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -dedup.minScrapeInterval=\"1m0s\""}
{"ts":"2023-07-18T14:22:10.056Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -envflag.enable=\"true\""}
{"ts":"2023-07-18T14:22:10.056Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -envflag.prefix=\"GATM_\""}
{"ts":"2023-07-18T14:22:10.056Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -loggerFormat=\"json\""}
{"ts":"2023-07-18T14:22:10.056Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -loggerLevel=\"INFO\""}
Успешный запрос в рамках приложения
{"ts":"2023-07-24T05:58:51.167Z","level":"info","caller":"**/app/vmselect/querystats/querystats.go:87","msg":"enabled query stats tracking at `/api/v1/status/top_queries` with -search.queryStats.lastQueriesCount=20000, -search.queryStats.minQueryDuration=1ms"}
Ошибка в рамках обращения к „storage“
{"ts":"2023-07-24T06:00:34.141Z","level":"warn","caller":"**/app/vmselect/main.go:451","msg":"error in \"/select/0/prometheus/api/v1/query # далее описывается причина ошибки
Ошибки могут быть связаны с временной недоступностью приложения „storage“.
Insert#
Уровни логирования DEBUG, INFO, WARN, ERROR, FATAL или PANIC. Уровень логирования задается при старте приложения в настройках «kind: ConfigMap». Уровень по умолчанию: INFO. Уровень логирования устанавливает администратор данного компонента.
Уровень логирования DEBUG не рекомендован для ПРОМ среды.
Наименование контейнера в рамках «kind: Pod» — synapse-metrics-insert.
Разворачивание среды
{"ts":"2023-07-24T05:57:50.331Z","level":"info","caller":"**/lib/logger/flag.go:12","msg":"build version: vminsert-20230718-053035-heads-test-build-bin-0-g2ee14fe1e"}
{"ts":"2023-07-24T05:57:50.331Z","level":"info","caller":"**/lib/logger/flag.go:13","msg":"command-line flags"}
{"ts":"2023-07-24T05:57:50.331Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -envflag.enable=\"true\""}
{"ts":"2023-07-24T05:57:50.331Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -envflag.prefix=\"GATM_\""}
{"ts":"2023-07-24T05:57:50.331Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -loggerFormat=\"json\""}
{"ts":"2023-07-24T05:57:50.331Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -loggerLevel=\"INFO\""}
{"ts":"2023-07-24T05:57:50.331Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -storageNode=\"synapse-metrics-storage-0.synapse-metrics-storage.synapse-metrics-system.svc.cluster.local:8400\""}
{"ts":"2023-07-24T05:57:50.331Z","level":"info","caller":"**/app/vminsert/main.go:97","msg":"initializing netstorage for storageNodes [synapse-metrics-storage-0.synapse-metrics-storage.synapse-metrics-system.svc.cluster.local:8400]..."}
{"ts":"2023-07-24T05:57:50.331Z","level":"info","caller":"**/lib/memory/memory.go:42","msg":"limiting caches to 188743680 bytes, leaving 125829120 bytes to the OS according to -memory.allowedPercent=60"}
{"ts":"2023-07-24T05:57:50.331Z","level":"info","caller":"**/app/vminsert/main.go:116","msg":"successfully initialized netstorage in 0.000 seconds"}
{"ts":"2023-07-24T05:57:50.331Z","level":"info","caller":"**/lib/httpserver/httpserver.go:96","msg":"starting http server at http://***.*.*.*:8480/"}
{"ts":"2023-07-24T05:57:50.331Z","level":"info","caller":"**/lib/httpserver/httpserver.go:97","msg":"pprof handlers are exposed at http://*.*.*.*:8480/debug/pprof/"}
Параметры запуска
{"ts":"2023-07-24T05:57:50.331Z","level":"info","caller":"**/lib/logger/flag.go:13","msg":"command-line flags"}
{"ts":"2023-07-24T05:57:50.331Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -envflag.enable=\"true\""}
{"ts":"2023-07-24T05:57:50.331Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -envflag.prefix=\"GATM_\""}
{"ts":"2023-07-24T05:57:50.331Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -loggerFormat=\"json\""}
{"ts":"2023-07-24T05:57:50.331Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -loggerLevel=\"INFO\""}
{"ts":"2023-07-24T05:57:50.331Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -storageNode=\"synapse-metrics-storage-0.synapse-metrics-storage.synapse-metrics-system.svc.cluster.local:8400\""}
Успешное подключение в „storage“
{"ts":"2023-07-24T05:58:06.938Z","level":"info","caller":"**/app/vminsert/netstorage/netstorage.go:268","msg":"successfully dialed -storageNode=\"synapse-metrics-storage-0.synapse-metrics-storage.synapse-metrics-system.svc.cluster.local:8400\""}
Ошибки при подключении к „storage“
{"ts":"2023-07-24T05:57:50.533Z","level":"warn","caller":"**/app/vminsert/netstorage/netstorage.go:264","msg":"cannot dial storageNode \"synapse-metrics-storage-0.synapse-metrics-storage.synapse-metrics-system.svc.cluster.local:8400\": dial tcp4 **.**.*.***:8400: connect: connection refused"}
Ошибки могут быть связаны с временной недоступностью приложения „storage“, а также при медленном старте контейнера «istio-proxy», что реализует блокирование запросов.
Ошибки при запросе к „storage“
{"ts":"2023-07-24T05:58:06.938Z","level":"info","caller":"**/app/vminsert/netstorage/netstorage.go:268","msg":"successfully dialed -storageNode=\"synapse-metrics-storage-0.synapse-metrics-storage.synapse-metrics-system.svc.cluster.local:8400\""}
{"ts":"2023-07-24T06:00:16.533Z","level":"warn","caller":"**/app/vminsert/netstorage/netstorage.go:306","msg":"cannot send 1615 bytes with 9 rows to -storageNode=\"synapse-metrics-storage-0.synapse-metrics-storage.synapse-metrics-system.svc.cluster.local:8400\": cannot read `ack` from vmstorage: EOF; closing the connection to storageNode and re-routing this data to healthy storage nodes"}
{"ts":"2023-07-24T06:00:16.533Z","level":"warn","caller":"**/app/vminsert/netstorage/netstorage.go:211","msg":"cannot push 1615 bytes with 9 rows to storage nodes, since all the nodes are temporarily unavailable; re-trying to send the data soon"}
{"ts":"2023-07-24T06:00:16.735Z","level":"warn","caller":"**/app/vminsert/netstorage/netstorage.go:264","msg":"cannot dial storageNode \"synapse-metrics-storage-0.synapse-metrics-storage.synapse-metrics-system.svc.cluster.local:8400\": dial tcp4: lookup synapse-metrics-storage-0.synapse-metrics-storage.synapse-metrics-system.svc.cluster.local on **.**.*.**:53: no such host"}
Storage#
Уровни логирования DEBUG, INFO, WARN, ERROR, FATAL или PANIC. Уровень логирования задается при старте приложения в настройках «kind: ConfigMap». Уровень по умолчанию: INFO. Уровень логирования устанавливает администратор данного компонента.
Уровень логирования DEBUG не рекомендован для ПРОМ среды.
Наименование контейнера в рамках «kind: Pod» — synapse-metrics-storage.
Разворачивание среды
{"ts":"2023-07-24T06:00:22.559Z","level":"info","caller":"**/lib/logger/flag.go:12","msg":"build version: vmstorage-20230718-053156-heads-test-build-bin-0-g2ee14fe1e"}
{"ts":"2023-07-24T06:00:22.559Z","level":"info","caller":"**/lib/logger/flag.go:13","msg":"command-line flags"}
{"ts":"2023-07-24T06:00:22.559Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -envflag.enable=\"true\""}
{"ts":"2023-07-24T06:00:22.559Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -envflag.prefix=\"GATM_\""}
{"ts":"2023-07-24T06:00:22.559Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -loggerFormat=\"json\""}
{"ts":"2023-07-24T06:00:22.559Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -loggerLevel=\"INFO\""}
{"ts":"2023-07-24T06:00:22.559Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -retentionPeriod=\"1d\""}
{"ts":"2023-07-24T06:00:22.559Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -storageDataPath=\"/storage\""}
{"ts":"2023-07-24T06:00:22.559Z","level":"info","caller":"**/app/vmstorage/main.go:100","msg":"opening storage at \"/storage\" with -retentionPeriod=1d"}
{"ts":"2023-07-24T06:00:22.561Z","level":"info","caller":"**/lib/memory/memory.go:42","msg":"limiting caches to 377487360 bytes, leaving 251658240 bytes to the OS according to -memory.allowedPercent=60"}
{"ts":"2023-07-24T06:00:22.564Z","level":"info","caller":"**/lib/storage/storage.go:873","msg":"nothing to load from \"/storage/cache/curr_hour_metric_ids\""}
{"ts":"2023-07-24T06:00:22.564Z","level":"info","caller":"**/lib/storage/storage.go:873","msg":"nothing to load from \"/storage/cache/prev_hour_metric_ids\""}
{"ts":"2023-07-24T06:00:22.564Z","level":"info","caller":"**/lib/storage/storage.go:833","msg":"nothing to load from \"/storage/cache/next_day_metric_ids\""}
{"ts":"2023-07-24T06:00:22.586Z","level":"info","caller":"**/app/vmstorage/main.go:112","msg":"successfully opened storage \"/storage\" in 0.027 seconds; partsCount: 0; blocksCount: 0; rowsCount: 0; sizeBytes: 0"}
Параметры запуска
{"ts":"2023-07-24T06:00:22.559Z","level":"info","caller":"**/lib/logger/flag.go:13","msg":"command-line flags"}
{"ts":"2023-07-24T06:00:22.559Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -envflag.enable=\"true\""}
{"ts":"2023-07-24T06:00:22.559Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -envflag.prefix=\"GATM_\""}
{"ts":"2023-07-24T06:00:22.559Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -loggerFormat=\"json\""}
{"ts":"2023-07-24T06:00:22.559Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -loggerLevel=\"INFO\""}
{"ts":"2023-07-24T06:00:22.559Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -retentionPeriod=\"1d\""}
{"ts":"2023-07-24T06:00:22.559Z","level":"info","caller":"**/lib/logger/flag.go:20","msg":" -storageDataPath=\"/storage\""}
Успешное подключение insert/select
{"ts":"2023-07-24T06:00:22.587Z","level":"info","caller":"**/app/vmstorage/servers/vminsert.go:65","msg":"accepting vminsert conns at 0.0.0.0:8400"}
{"ts":"2023-07-24T06:00:22.587Z","level":"info","caller":"**/lib/vmselectapi/server.go:157","msg":"accepting vmselect conns at 0.0.0.0:8401"}
{"ts":"2023-07-24T06:00:22.587Z","level":"info","caller":"**/lib/httpserver/httpserver.go:96","msg":"starting http server at http://***.*.*.*:8482/"}
{"ts":"2023-07-24T06:00:22.587Z","level":"info","caller":"**/lib/httpserver/httpserver.go:97","msg":"pprof handlers are exposed at http://***.*.*.*:8482/debug/pprof/"}
{"ts":"2023-07-24T06:00:45.037Z","level":"info","caller":"**/app/vmstorage/servers/vminsert.go:114","msg":"processing vminsert conn from ***.*.*.*:37931"}
Резервирование данных для хранения
{"ts":"2023-07-24T06:00:45.040Z","level":"info","caller":"**/lib/storage/partition.go:221","msg":"creating a partition \"2023_07\" with smallPartsPath=\"/storage/data/small/2023_07\", bigPartsPath=\"/storage/data/big/2023_07\""}
{"ts":"2023-07-24T06:00:45.042Z","level":"info","caller":"**/lib/storage/partition.go:230","msg":"partition \"2023_07\" has been created"}
Alert#
Уровни логирования DEBUG, INFO, WARN, ERROR, FATAL или PANIC. Уровень логирования задается при старте приложения в настройках «kind: ConfigMap». Уровень по умолчанию: INFO. Уровень логирования устанавливает администратор данного компонента.
Уровень логирования DEBUG не рекомендован для ПРОМ среды.
Наименование контейнера в рамках «kind: Pod» — synapse-metrics-alert.
Разворачивание среды
2023-07-19T07:37:30.670Z info **/lib/logger/flag.go:12 build version: vmalert-20230718-052954-heads-test-build-bin-0-g2ee14fe1e
2023-07-19T07:37:30.670Z info **/lib/logger/flag.go:13 command-line flags
2023-07-19T07:37:30.670Z info **/lib/logger/flag.go:20 -datasource.url="secret"
2023-07-19T07:37:30.670Z info **/lib/logger/flag.go:20 -disableNotifiers="true"
2023-07-19T07:37:30.670Z info **/lib/logger/flag.go:20 -remoteRead.url="secret"
2023-07-19T07:37:30.670Z info **/lib/logger/flag.go:20 -remoteWrite.url="secret"
2023-07-19T07:37:30.670Z info **/lib/logger/flag.go:20 -rule="/var/log/rules/*.yaml"
2023-07-19T07:37:30.672Z info **/app/vmalert/main.go:175 reading rules configuration file from "/var/log/rules/*.yaml"
2023-07-19T07:37:30.673Z info **/app/vmalert/config/log/logger.go:52 found 4 files to read from "Local FS{MatchPattern: \"/var/log/rules/*.yaml\"}"
2023-07-19T07:37:30.673Z info **/app/vmalert/config/log/logger.go:52 finished reading 4 files in 90.093µs from "Local FS{MatchPattern: \"/var/log/rules/*.yaml\"}"
2023-07-19T07:37:30.824Z info **/lib/httpserver/httpserver.go:96 starting http server at http://*.*.*.*:8880/
2023-07-19T07:37:30.824Z info **/lib/httpserver/httpserver.go:97 pprof handlers are exposed at http://*.*.*.*:8880/debug/pprof/
Параметры запуска
2023-07-19T07:37:30.670Z info **/lib/logger/flag.go:20 -datasource.url="secret"
2023-07-19T07:37:30.670Z info **/lib/logger/flag.go:20 -disableNotifiers="true"
2023-07-19T07:37:30.670Z info **/lib/logger/flag.go:20 -remoteRead.url="secret"
2023-07-19T07:37:30.670Z info **/lib/logger/flag.go:20 -remoteWrite.url="secret"
2023-07-19T07:37:30.670Z info **/lib/logger/flag.go:20 -rule="/var/log/rules/*.yaml"
Загрузка правил агрегации
2023-07-19T07:37:30.672Z info **/app/vmalert/main.go:175 reading rules configuration file from "/var/log/rules/*.yaml"
2023-07-19T07:37:30.673Z info **/app/vmalert/config/log/logger.go:52 found 4 files to read from "Local FS{MatchPattern: \"/var/log/rules/*.yaml\"}"
2023-07-19T07:37:30.673Z info **/app/vmalert/config/log/logger.go:52 finished reading 4 files in 90.093µs from "Local FS{MatchPattern: \"/var/log/rules/*.yaml\"}"
Успешная обработка правил агрегации
2023-07-19T07:37:31.956Z info **/app/vmalert/group.go:309 group "kube-apiserver.rules" started; interval=1m0s; concurrency=1
2023-07-19T07:37:34.137Z info **/app/vmalert/group.go:309 group "openshift-sre.rules" started; interval=1m0s; concurrency=1
Ошибка при обработке правил агрегации
2023-07-19T07:37:31.973Z error **/app/vmalert/group.go:326 group "kube-apiserver.rules": rule "apiserver_request:burnrate6h":
2023-07-19T07:37:31.973Z error **/app/vmalert/group.go:326 group "kube-apiserver.rules": rule "apiserver_request:burnrate5m"
При старте допустимы сообщения об ошибках, так как есть временной диапазон по старту контейнера «istio-proxy». Если ошибки не будут повторяться, то приложение работает в штатном режиме.
Также в указанных ошибках транслируются ошибки, связанные с сетевым взаимодействием компонентов, таких как „agent“ и select.
AlertManager#
Уровни логирования debug, info. Флаг реализуется в рамках «kind: StatefulSet» (args: - „–log.level=info“).
Уровень логирования debug не рекомендован для ПРОМ среды.
Наименование контейнера в рамках «kind: Pod» — synapse-metrics-alertmanager.
Разворачивание среды
ts=2024-11-04T13:35:54.519Z caller=main.go:193 level=info msg="Starting Alertmanager" version="(version=, revision=)"
ts=2024-11-04T13:35:54.519Z caller=main.go:194 level=info build_context="(go=go1.22.5, platform=linux/amd64"
ts=2024-11-04T13:35:54.520Z caller=cluster.go:186 level=info component=cluster msg="setting advertise address explicitly" addr=*.*.*.* port=9094
ts=2024-11-04T13:35:54.562Z caller=cluster.go:683 level=info component=cluster msg="Waiting for gossip to settle..." interval=2s
ts=2024-11-04T13:35:54.668Z caller=coordinator.go:113 level=info component=configuration msg="Loading configuration file" file=/var/alertmanager/alertmanager.yml
ts=2024-11-04T13:35:54.668Z caller=coordinator.go:126 level=info component=configuration msg="Completed loading of configuration file" file=/var/alertmanager/alertmanager.yml
ts=2024-11-04T13:35:54.671Z caller=tls_config.go:313 level=info msg="Listening on" address=0.0.0.0:9093
ts=2024-11-04T13:35:54.671Z caller=tls_config.go:316 level=info msg="TLS is disabled." http2=false address=0.0.0.0:9093
ts=2024-11-04T13:35:56.562Z caller=cluster.go:708 level=info component=cluster msg="gossip not settled" polls=0 before=0 now=1 elapsed=2.000322946s
ts=2024-11-04T13:36:04.565Z caller=cluster.go:700 level=info component=cluster msg="gossip settled; proceeding" elapsed=10.002993136s
Недоступность сервера по приему Alert сообщений
caller=dispatch.go:357 level=error component=dispatcher msg="Notify for alerts failed" num_alerts=9 err="default-receiver/webhook[0]: notify retry canceled after 11 attempts: unexpected status code 503: upstream connect error or disconnect/reset before headers. reset reason: connection failure"
В рамках сообщения необходимо проверить интеграционные логи в рамках контейнера «istio-proxy», либо проверить работоспособность сервера, который принимает сообщения от alertmanager.
Synapse-logs#
Серверная часть#
Уровни логирования DEBUG, INFO, WARN, ERROR, FATAL или PANIC. Уровень логирования задается при старте приложения в настройках «kind: ConfigMap». Уровень по умолчанию: INFO. Уровень логирования устанавливает администратор данного компонента.
Уровень логирования DEBUG не рекомендован для ПРОМ среды.
Наименование контейнера в рамках «kind: Pod» — synapse-logs-insert.
Разворачивание среды
{"ts":"2024-03-04T10:41:34.112Z","level":"info","caller":"***/lib/logger/flag.go:12","msg":"build version: vlinsert-20240115-073953-heads-feature-vlogs-0-g7299498d0-dirty-3b8cc66b"}
{"ts":"2024-03-04T10:41:34.112Z","level":"info","caller":"***/app/vlinsert/main.go:47","msg":"starting VictoriaLogs at \":9428\"..."}
{"ts":"2024-03-04T10:41:34.112Z","level":"info","caller":"***/app/vlinsert/vlinsert/vlinsert.go:23","msg":"starting VLInsert in ClusterMode"}
{"ts":"2024-03-04T10:41:34.112Z","level":"info","caller":"***/app/vlinsert/main.go:53","msg":"started Logs in 0.000 seconds;"}
{"ts":"2024-03-04T10:41:34.112Z","level":"info","caller":"***/lib/httpserver/httpserver.go:101","msg":"starting http server at http://*.*.*.*:9428/"}
{"ts":"2024-03-04T10:41:34.112Z","level":"info","caller":"***/lib/httpserver/httpserver.go:102","msg":"pprof handlers are exposed at http://*.*.*.*:9428/debug/pprof/"}
Параметры запуска
{"ts":"2024-03-04T10:41:34.112Z","level":"info","caller":"***/lib/logger/flag.go:13","msg":"command-line flags"}
{"ts":"2024-03-04T10:41:34.112Z","level":"info","caller":"***/lib/logger/flag.go:20","msg":" -envflag.enable=\"true\""}
{"ts":"2024-03-04T10:41:34.112Z","level":"info","caller":"***/lib/logger/flag.go:20","msg":" -envflag.prefix=\"GATM_\""}
{"ts":"2024-03-04T10:41:34.112Z","level":"info","caller":"***/lib/logger/flag.go:20","msg":" -loggerFormat=\"json\""}
{"ts":"2024-03-04T10:41:34.112Z","level":"info","caller":"***/lib/logger/flag.go:20","msg":" -loggerLevel=\"INFO\""}
{"ts":"2024-03-04T10:41:34.112Z","level":"info","caller":"***/lib/logger/flag.go:20","msg":" -storageNode=\"http://synapse-logs-storage-0.synapse-logs-storage.cloud-esb-system.svc.cluster.local:9428,http://synapse-logs-storage-1.synapse-logs-storage.cloud-esb-system.svc.cluster.local:9428\""}
Пример запроса по записи
curl -X POST -H "Content-Type: application/json" -d '{"time":"2024-01-18T12:41:20Z", "level":"info", "message": "ready one go", "stream":"test1"}' -v "http://localhost:9428/insert/jsonline?_msg_field=message&_stream_field=stream&_time_field=time"
Наименование контейнера в рамках «kind: Pod» — synapse-logs-select.
Разворачивание среды
{"ts":"2024-03-04T10:41:34.896Z","level":"info","caller":"***/lib/logger/flag.go:12","msg":"build version: vlselect-20240117-082338-heads-feature-vlogs-0-g17b9f1503-dirty-4ecf2b47"}
{"ts":"2024-03-04T10:41:34.896Z","level":"info","caller":"***/app/vlselect/main.go:46","msg":"starting VictoriaLogs at \":9428\"..."}
{"ts":"2024-03-04T10:41:34.896Z","level":"info","caller":"***/app/vlselect/vlselect/main.go:54","msg":"starting VLSelect in ClusterMode"}
{"ts":"2024-03-04T10:41:34.896Z","level":"info","caller":"***/app/vlselect/main.go:52","msg":"started VictoriaLogs in 0.000 seconds;"}
{"ts":"2024-03-04T10:41:34.896Z","level":"info","caller":"***/lib/httpserver/httpserver.go:101","msg":"starting http server at http://*.*.*.*:9428/"}
{"ts":"2024-03-04T10:41:34.896Z","level":"info","caller":"***/lib/httpserver/httpserver.go:102","msg":"pprof handlers are exposed at http://*.*.*.*:9428/debug/pprof/"}
Параметры запуска
{"ts":"2024-03-04T10:41:34.896Z","level":"info","caller":"***/lib/logger/flag.go:13","msg":"command-line flags"}
{"ts":"2024-03-04T10:41:34.896Z","level":"info","caller":"***/lib/logger/flag.go:20","msg":" -envflag.enable=\"true\""}
{"ts":"2024-03-04T10:41:34.896Z","level":"info","caller":"***/lib/logger/flag.go:20","msg":" -envflag.prefix=\"GATM_\""}
{"ts":"2024-03-04T10:41:34.896Z","level":"info","caller":"***/lib/logger/flag.go:20","msg":" -loggerFormat=\"json\""}
{"ts":"2024-03-04T10:41:34.896Z","level":"info","caller":"***/lib/logger/flag.go:20","msg":" -loggerLevel=\"INFO\""}
{"ts":"2024-03-04T10:41:34.896Z","level":"info","caller":"***/lib/logger/flag.go:20","msg":" -storageNode=\"http://synapse-logs-storage-0.synapse-logs-storage.cloud-esb-system.svc.cluster.local:9428,http://synapse-logs-storage-1.synapse-logs-storage.cloud-esb-system.svc.cluster.local:9428\""}
Ошибка при обработке запроса на чтение
{"ts":"2024-03-22T07:04:35.778Z","level":"warn","caller":"***/lib/httpserver/httpserver.go:365","msg":"remoteAddr: \"127.0.0.6:38993, X-Forwarded-For: *.*.*.*\"; requestURI: /version; unsupported path requested: \"/version\""}
{"ts":"2024-03-22T07:59:16.105Z","level":"warn","caller":"VictoriaMetrics/lib/httpserver/httpserver.go:365","msg":"remoteAddr: \"127.0.0.6:51227, X-Forwarded-For: *.*.*.*\"; requestURI: /api/v1/query_range?end=1711094356.1019068&query=istio_requests_total%7Bjob%3D%27esb%27%2C+esb%21%3D%27%27%7D&start=1711093740&step=30; unsupported path requested: \"/api/v1/query_range\""}
В данном случае необходимо скорректировать запрос.
Пример корректного запроса:
POST http://synapse-logs-select.apps.ocp.syn-dev.solution.sbt/select/logsql/query
Accept: application/json
Content-Type: application/x-www-form-urlencoded
query=responce_flag%3A*%20response_code_details%3A*%20duration%3A*%20bytes_received%3A*%20authority%3A*%20bytes_send%3A*%20user_agent%3A*%20grpc_status%3A*%20path%3A*%20upstream%3A*
Пример ответа:
[
{
"_msg": "",
"_stream": "{service=\"ingressgateway-esb-demo\"}",
"_time": "2024-02-14T19:37:11.799889734Z",
"authority": "ingressdemo.apps.ocp.syn-dev.solution.sbt",
"bytes_received": "9",
"bytes_send": "20",
"duration": "9",
"grpc_status": "- -",
"path": "/",
"responce_flag": "-",
"response_code_details": "via_upstream",
"upstream": "outbound|8080||grpc-kafka-adapter.esb-demo.svc.cluster.local ",
"user_agent": "PostmanRuntime/7.36.1"
},
{
"_msg": "",
"_stream": "{service=\"ingressgateway-esb-demo\"}",
"_time": "2024-02-14T19:37:15.800276306Z",
"authority": "ingressdemo.apps.ocp.syn-dev.solution.sbt",
"bytes_received": "9",
"bytes_send": "20",
"duration": "10",
"grpc_status": "- -",
"path": "/",
"responce_flag": "-",
"response_code_details": "via_upstream",
"upstream": "outbound|8080||grpc-kafka-adapter.esb-demo.svc.cluster.local ",
"user_agent": "PostmanRuntime/7.36.1"
}
]
Наименование контейнера в рамках «kind: Pod» — synapse-logs-storage.
Разворачивание среды
2024-03-04T10:41:38.157Z info ***/lib/logger/flag.go:12 build version: victoria-logs-20240112-094436-heads-feature-vlogs-0-gcf8845b00-dirty-6e6c9ad6
2024-03-04T10:41:38.157Z info ***/app/victoria-logs/main.go:42 starting VictoriaLogs at ":9428"...
2024-03-04T10:41:38.157Z info ***/app/vlstorage/vlstorage/main.go:58 opening storage at -storageDataPath=/storage
2024-03-04T10:41:38.157Z info ***/lib/memory/memory.go:42 limiting caches to 188743680 bytes, leaving 125829120 bytes to the OS according to -memory.allowedPercent=60
2024-03-04T10:41:38.159Z info ***/app/vlstorage/vlstorage/main.go:64 successfully opened storage in 0.002 seconds; partsCount: 0; blocksCount: 0; rowsCount: 0; sizeBytes: 0
2024-03-04T10:41:38.159Z info ***/app/victoria-logs/main.go:50 started VictoriaLogs in 0.002 seconds; see https://docs.victoriametrics.com/VictoriaLogs/
2024-03-04T10:41:38.160Z info ***/lib/httpserver/httpserver.go:101 starting http server at http://*.*.*.*:9428/
2024-03-04T10:41:38.160Z info ***/lib/httpserver/httpserver.go:102 pprof handlers are exposed at http://*.*.*.*:9428/debug/pprof/
Параметры запуска
2024-03-04T10:41:38.157Z info ***/lib/logger/flag.go:13 command-line flags
2024-03-04T10:41:38.157Z info ***/lib/logger/flag.go:20 -envflag.enable="true"
2024-03-04T10:41:38.157Z info ***/lib/logger/flag.go:20 -envflag.prefix="GATM_"
2024-03-04T10:41:38.157Z info ***/lib/logger/flag.go:20 -loggerLevel="INFO"
2024-03-04T10:41:38.157Z info ***/lib/logger/flag.go:20 -retentionPeriod="1d"
2024-03-04T10:41:38.157Z info ***/lib/logger/flag.go:20 -storageDataPath="/storage"
Информация об удалении части данных по логам
2024-03-06T00:41:38.160Z info ***/lib/logstorage/storage.go:348 the partition /storage/partitions/20240304 is scheduled to be deleted because it is outside the -retentionPeriod=1d
Стандартная логика по глубине хранения данных.
Ошибка в рамках обработки запроса
2024-03-14T11:35:25.235Z warn ***/app/vlselect/logsql/logsql.go:31 remoteAddr: "127.0.0.6:46551"; requestURI: /select/logsql/query?query=%28status%3A%2A+OR+status%3A%22%22%29+%28body%3A%2A+OR+body%3A%22%22%29+%28information%3A%2A+OR+information%3A%22%22%29+service%3Amq-kafka-mapper%28msg%3A%2A+OR+msg%3A%22%22%29+podName%3A%2A+_time%3A%5B1710394524%2C+1710416124%5D; cannot parse query
„Agent“ (logs)#
Разворачивание среды
2024-07-26T08:49:37Z I! Loading config: /var/logs-agent/telegraf.conf
2024-07-26T08:49:37Z I! Starting Telegraf unknown brought to you by InfluxData the makers of InfluxDB
2024-07-26T08:49:37Z I! Available plugins: 48 inputs, 9 aggregators, 28 processors, 23 parsers, 42 outputs, 6 secret-stores
Информация об источниках логов
2024-07-26T08:49:37Z I! Loaded inputs: tail
Информация о конфигурации обработки записей
2024-07-26T08:49:37Z I! Loaded aggregators:
2024-07-26T08:49:37Z I! Loaded processors: converter override
2024-07-26T08:49:37Z I! Loaded secretstores:
Информация о конфигурации публикации записей
2024-07-26T08:49:37Z I! Loaded outputs: loki
Информация о конфигурации агента сбора логов
2024-07-26T08:49:37Z I! [agent] Config: Interval:2s, Quiet:false, Hostname:"amadeus-0", Flush Interval:2s
Предупреждение о перезагрузке конфигурации в результате ее изменения
2024-07-26T09:08:46Z I! Reloading Telegraf config
2024-07-26T09:08:46Z I! [agent] Hang on, flushing any cached metrics before shutdown
2024-07-26T09:08:46Z I! [agent] Stopping running outputs
2024-07-26T09:08:46Z I! Loading config: /var/logs-agent/telegraf.conf
При включенной опции –watch-config.
Ошибка при записи на серверную часть GATM
2024-07-30T12:10:37Z E! [agent] Error writing to outputs.loki: when writing to [http://synapse-logs-insert:9428/insert/loki/api/v1/push] received status code, 400: {}remoteAddr: "***.*.*.*:*****"; requestURI: /insert/loki/api/v1/push; unsupported path requested: "/insert/loki/api/v1/push"
Ошибка возникает при недоступности одной из реплик „Storage“ (logs), необходимо подтвердить его работоспособность.
Предупреждение о проблемах чтения логов из источника
2024-07-26T09:16:19Z E! [inputs.tail] Malformed log line in "/opt/synapse/logs/log.log": ["\"level\":\"error\",\"msg\":\"Ошибка выполнения запроса. UNEXPECTED_ERROR_ON_EVEN_INDEX=true, включена обработка ошибок. Измените значение на false, чтобы пропускать обработку ошибок\"}"]: invalid character ':' after top-level value
При включенной опции –watch-config.
Предупреждение о проблемах отправки в хранилище логов
2024-07-26T09:13:24Z W! [agent] ["outputs.loki"] did not complete within its flush interval
2024-07-26T09:13:25Z E! [agent] Error writing to outputs.loki: Post "http://synapse-logs-insert.istio-se-system.svc.cluster.local:9428/insert/loki/api/v1/push?_stream_fields=host&_msg_field=message": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
Предупреждение о недоступности конфигурационного файла
2024-07-26T09:22:28Z E! error loading config file /var/logs-agent2/telegraf.conf: open /var/logs-agent2/telegraf.conf: no such file or directory
Предупреждение о некорректности конфигурационного файла
2024-07-26T09:24:43Z E! error loading config file /var/logs-agent/telegraf.conf: error parsing data: line 2: invalid TOML syntax
Synapse sender (logs)#
В рамках приложения реализуется 2 функции:
Функция переотправки сообщений, в рамках которой запрос реализуется компонентом VISL;
Функция планировщика задач, в рамках которой приложение устанавливается в пользовательский проект (CronJob).
Переотправка сообщений.
Разворачивание среды
"message": "Starting Synapse Sender:1.0.0 (Branch: , Revision: 5c81bce) build user: Synapse Authors build date: go version: go1.22.7 version: 1.0.0", "mode":"app"}
Переотправка сообщений
Логирование запроса в рамках Synapse „logs“ „storage“, для подтверждения запроса, второй запрос для переотправки сообщения.
{"time": 2024-11-05 06:22:10.90861464 +0000 UTC m=+107.177642550, "message": "request to storage: synapse-logs-select****:9092 sent", "mode":"app"}
{"time": 2024-11-05 06:22:10.976865346 +0000 UTC m=+107.245893213, "message": "request to host: sales-demo-mutual.apps*****:443 REsent", "mode":"app"}
Планировщик заданий.
В рамках исполнения используется конфигурация CronJob, которая реализует Pod по заданному пользователем графику (например, каждый час).
Разворачивание среды
{"time": 2024-11-05 10:59:59.349047497 +0000 UTC m=+0.001214698, "message": "job started", "mode":"job"}
{"time": 2024-11-05 10:59:59.349126735 +0000 UTC m=+0.001293934, "message": "starting http probes", "mode":"job"}
Переотправка группы сообщений
{"time": 2024-11-05 10:59:59.349047497 +0000 UTC m=+0.001214698, "message": "job started", "mode":"job"}
{"time": 2024-11-05 10:59:59.349126735 +0000 UTC m=+0.001293934, "message": "starting http probes", "mode":"job"}
Завершение работы в рамках исполнения
{"time": 2024-11-05 13:00:20.519289649 +0000 UTC m=+20.769462217, "message": "job run succeed, sidecar kill signal sent", "mode":"job"}
{"time": 2024-11-05 13:00:20.519378837 +0000 UTC m=+20.769551738, "message": "job completed successfully", "mode":"job"}
События мониторинга#
„Agent“#
Метрика |
Описание |
|---|---|
gatm_job_target_up |
Количество активных целей (target) |
gatm_job_target_down |
Количество неактивных целей (target) |
gatm_promscrape_scraped_samples_sum |
Количество построчных метрик |
gatm_promscrape_conn_reads_total |
Общее количество запросов по целям сбора |
gatm_promscrape_conn_read_errors_total |
Общее количество ошибок по целям сбора |
flag |
Информация о флагах запуска приложения |
gatm_promscrape_targets |
Общее количество целей в рамках задач по сбору |
gatm_http_requests_total |
Общее количество запросов |
Kafka „Adapter“#
Метрика |
Описание |
|---|---|
http_requests_total |
Общее количество запросов |
Event Exporter#
Метрика |
Описание |
|---|---|
gatm_event_exporter_execution_total |
Общее количество реализованных запросов по сбору событий |
gatm_event_exporter_events_handled |
Общее количество успешно реализованных запросов по сбору событий |
kube_event_unique_events_total |
Информация об уникальных собранных событиях (event) |
kube_event_count |
Число повторений конкретного события |
Select#
Метрика |
Описание |
|---|---|
vm_requests_total |
Общее количество запросов |
vm_rows_read_per_query_sum |
Количество метрик в рамках запроса |
flag |
Информация о флагах запуска приложения |
vm_tcpdialer_errors_total |
Общее количество запросов с ошибками к „storage“ |
vm_tcpdialer_dials_total |
Общее количество запросов к „storage“ |
vm_http_requests_total |
Общее количество запросов к select |
vm_http_request_errors_total |
Общее количество запросов с ошибками к select |
Insert#
Метрика |
Описание |
|---|---|
vm_rows_inserted_total |
Общее количество записей в рамках „storage“ |
flag |
Информация о флагах запуска приложения |
vm_tcpdialer_errors_total |
Общее количество запросов с ошибками к „storage“ |
vm_tcpdialer_dials_total |
Общее количество запросов к „storage“ |
vm_http_requests_total |
Общее количество запросов к insert |
vm_http_request_errors_total |
Общее количество запросов с ошибками к insert |
Storage#
Метрика |
Описание |
|---|---|
vm_rows_merged_total |
Общее количество добавленных метрик |
flag |
Информация о флагах запуска приложения |
vm_rows_added_to_storage_total |
Количество записанных метрик |
vm_vmselect_rpc_requests_total |
Количество запросов на чтение метрик |
vm_data_size_bytes |
Количество используемой памяти для хранения |
Alert#
Метрика |
Описание |
|---|---|
vmalert_execution_total |
Количество запусков правил по агрегации |
flag |
Информация о флагах запуска приложения |
Alert Manager#
Метрика |
Описание |
|---|---|
alertmanager_alerts{state=»active»} |
Количество оповощений в состоянии «active» |
alertmanager_alerts{state=»suppressed»} |
Количество оповощений в состоянии «suppressed» |
alertmanager_alerts{state=»unprocessed»} |
Количество оповощений в состоянии «unprocessed» |
alertmanager_alerts_invalid_total{version=»v2»} |
Количество полученных некорректных оповещений |
alertmanager_alerts_received_total{status=»firing»,version=»v2»} |
Общее количество полученных оповещений в статусе «firing» |
alertmanager_alerts_received_total{status=»resolved» |
Общее количество полученных оповещений в статусе «resolved» |
alertmanager_cluster_alive_messages_total{peer=»»}* |
Общее количество полученных «живых» сообщений в разрезе конкретного(-ых) подключения(-ий) |
alertmanager_cluster_enabled |
Индикатор доступности кластера |
alertmanager_cluster_failed_peers |
Количество неудачных соединений |
alertmanager_cluster_health_score |
Отметка состояния кластера (0 - кластер «здоров», также допустимы небольшое значения данного показателя) |
alertmanager_cluster_members |
Текущее количество активных участников кластера |
alertmanager_cluster_messages_pruned_total |
Общее количество удаленных сообщений кластера |
alertmanager_cluster_messages_queued |
Количество сообщений кластера, поставленных в очередь |
alertmanager_cluster_messages_received_size_total{msg_type=»full_state»} |
Общий размер полученных сообщений кластера (с типом сообщения - full_state) |
alertmanager_cluster_messages_received_size_total{msg_type=»update»} |
Общий размер полученных сообщений кластера (с типом сообщения - update) |
alertmanager_cluster_messages_received_total{msg_type=»full_state»} |
Общее количество полученных сообщений кластера (с типом сообщения - full_state) |
alertmanager_cluster_messages_received_total{msg_type=»update»} |
Общее количество полученных сообщений кластера (с типом сообщения - update) |
alertmanager_cluster_messages_sent_size_total{msg_type=»full_state»} |
Общий размер отправленных сообщений кластера (с типом сообщения - full_state) |
alertmanager_cluster_messages_sent_size_total{msg_type=»update»} |
Общий размер отправленных сообщений кластера (с типом сообщения - update) |
alertmanager_cluster_messages_sent_total{msg_type=»full_state»} |
Общее количество отправленных сообщений кластера (с типом сообщения - full_state) |
alertmanager_cluster_messages_sent_total{msg_type=»update»} |
Общее количество отправленных сообщений кластера (с типом сообщения - update) |
alertmanager_cluster_peer_info{peer=»»}* |
Метрика-константа (значение всегда |
alertmanager_cluster_peers_joined_total |
Количество активных участников в соединении(-ях) |
alertmanager_cluster_peers_left_total |
Количество отсоединенных участников в соединении(-ях) |
alertmanager_cluster_peers_update_total |
Количество участников с обновленными метаданными |
alertmanager_cluster_reconnections_failed_total |
Количество повторных неудачных попыток соединения с кластером |
alertmanager_cluster_reconnections_total |
Общее количество повторных попыток соединения с кластером |
alertmanager_cluster_refresh_join_failed_total |
Количество неудачных попыток соединения с кластером через обновление |
alertmanager_cluster_refresh_join_total |
Общее количество повторных попыток соединения с кластером через обновление |
alertmanager_config_hash |
Хеш текущей загруженной конфигурации Alert Manager |
alertmanager_config_last_reload_success_timestamp_seconds |
Точное время (timestamp) последней успешной загруженной конфигурации |
alertmanager_config_last_reload_successful |
Индикатор успешности последней загруженной конфигурации (1 - да, 0 - нет) |
alertmanager_dispatcher_aggregation_groups |
Количество активных групп аггрегации |
alertmanager_dispatcher_alert_processing_duration_seconds_sum |
Сумма временных задержек при обработке оповещений |
alertmanager_dispatcher_alert_processing_duration_seconds_count |
Количество временных задержек при обработке оповещений |
alertmanager_http_concurrency_limit_exceeded_total{method=»get»} |
Общее количество сбоев при отправке HTTP-запросов из-за превышения предела параллелизма |
Sender#
Данное приложение не формирует события мониторинга.
Часто встречающиеся проблемы и пути их устранения#
Проблема |
Причина |
Решение |
|---|---|---|
Не стартует Pod приложения |
Недостаточно ресурсов |
Увеличить limits/requests для приложения |
Нет доступного узла для запуска |
Зарегистрировать обращение в поддержку инфраструктуры |
|
Ошибка в конфигурации |
Выгрузить лог, провести анализ, скорректировать конфигурацию |
|
Ресурсы Pod не соответствуют ограничениям, заданным в LimitRanges |
Изменить ресурсы для приложения таким образом, чтобы они соответствовали LimitRanges либо удалить LimitRanges |
|
Частый перезапуск контейнера приложения |
Медленная загрузка приложения |
Увеличить задержку и/или интервал опроса Liveness пробы |
Недостаточно ресурсов |
Увеличить limits/requests для приложения |
|
Ошибка при вызове |
Нет доступных подов сервиса, которому направлен вызов |
Проверить состояние сервиса-получателя вызова |
Ошибки в конфигурации сервисного прокси |
Выгрузить лог сервисного прокси, проанализировать, устранить ошибки (ознакомиться с указанными действиями можно в документации компонента SPVX «Руководство по системному администрированию», раздел «Сценарии администрирования»). Пример устранения: редактирование конфигурации Istio по host вызываемого сервиса. |