Логи из Kubernetes

Материал из Документация Ключ-АСТРОМ

Лог монитор Ключ-АСТРОМ поддерживает сбор логов из систем оркестровки контейнеров Kubernetes через ЕдиныйАгент.

В качестве альтернативы сбору логов на основе ЕдиногоАгента вы можете передавать журналы в Ключ-АСТРОМ через API приема логов с интеграцией, например Fluent Bit , Fluentd , Logstash.

Поддерживаемые функции

Лог монитор Ключ-АСТРОМ поддерживает различные контейнерные платформы на базе Kubernetes, такие как Upstream Kubernetes или Red Hat OpenShift, использующие containerd или CRI-O в качестве среды выполнения контейнера.

Docker несовместим с CRI, Container Runtime Interface. По этой причине настройки Kubernetes с использованием Docker поддерживаются лишь частично. Kubernetes прекратил поддержку Docker как среды выполнения контейнера после v1.20.

Более подробную информацию о поддерживаемых версиях Kubernetes можно найти в разделе Жизненный цикл поддержки Kubernetes.

Автоматическое обнаружение логов Kubernetes

ЕдиныйАгент автоматически обнаруживает логи, записанные контейнерным приложением в его потоки stdout / stderr. Kubernetes Engine сохраняет эти потоки логов в файл на узле Kubernetes. ЕдиныйАгент автоматически обнаруживает эти файлы логов и сообщает логи контейнера Container Output в источнике логов.

Логи, записанные непосредственно в файловую систему pods, не обнаруживаются ЕдиныйАгент. В этом случае используйте интеграцию log shipper, например Fluent Bit.

Подключение логов к свойствам Kubernetes

ЕдиныйАгент дополняет принятые логи следующими метаданными Kubernetes: ka.kubernetes.cluster.name, ka.kubernetes.node.system_uuid, k8s.pod.name, k8s.pod.uid, k8s.container.name, k8s.namespace.name, k8s.deployment.name. Эти метаданные используются для сопоставления логов с моделью кластеров Kubernetes, пространств имен, рабочих нагрузок и модулей.

Настройка приема логов из Kubernetes

Для приема логов из Kubernetes требуется определение правил приема этих логов. Конфигурация основана на иерархии правил, которые используют сопоставления для Kubernetes и других общих атрибутов записи логов. Эти правила определяют, какие файлы логов, среди обнаруженных ЕдинымАгентом, будут приниматься.

Используйте следующие рекомендуемые атрибуты соответствия при настройке приема логов из Kubernetes.

Атрибут Описание Логика поиска
Имя пространства имен K8s Сопоставление осуществляется на основе имени пространства имен Kubernetes. Перечислены атрибуты, видимые за последние 90 дней.
Имя контейнера K8s Сопоставление осуществляется по имени контейнера Kubernetes. Перечислены атрибуты, видимые за последние 90 дней.
Имя развертывания K8s Сопоставление выполняется на основе имени модуля Kubernetes.

1002.png Подлежит изменению в будущих версиях log agent. Отдельные сопоставители для каждого типа рабочей нагрузки будут скоро доступны. Вместо этого мы рекомендуем использовать имя контейнера K8s.

Перечислены атрибуты, видимые за последние 90 дней.
Содержание логов Сопоставление осуществляется на основе содержимого логов; поддерживаются подстановочные знаки в виде звездочки. Можно ввести вручную. Ограничения по времени нет.
Уровень записи логов 1 2 Сопоставление основано на уровне записи логов. Поддерживаются следующие значения: alert, critical, debug, emergency, error, info, none, notice, severe, warn. Можно ввести вручную. Ограничения по времени нет.

1 Атрибут уровня записи логов, преобразованный ЕдинымАгентом, отличается от атрибута журнала status, преобразованного сервером Ключ-АСТРОМ.

2 Минимальная требуемая версия ЕдиногоАгента — 1.273.

При настройке приема логов из Kubernetes можно также использовать следующие общие атрибуты сопоставления.

Атрибут Описание Логика поиска
Имя контейнера Сопоставление основано на имени контейнера. Используется для неоркестрированных контейнерных сред, например Docker. Перечислены атрибуты, видимые за последние 90 дней.
Источник логов Сопоставление основано на атрибуте источника логов. В случае логов Kubernetes он всегда установлен на Container Output ; подстановочные знаки поддерживаются в виде звездочки. Можно ввести вручную. Ограничения по времени нет.
Группа процессов Сопоставление осуществляется на основе идентификатора группы процессов. Перечислены объекты, видимые за последние 3 дня.
Технология процесса Сопоставление осуществляется на основе названия технологии. Можно ввести вручную. Ограничения по времени нет.

Иерархия правил приема логов

Правила приема логов могут быть определены в области среды, а также на хосте или группе хостов. Соответствующая иерархия выглядит следующим образом:

  1. Правила конфигурации хоста;
  2. Правила конфигурации группы хостов;
  3. Правила конфигурации арендатора.

Сопоставление происходит в предопределенной иерархии, и правила выполняются сверху вниз. Это означает, что если правило выше в списке соответствует определенным данным логов, то более низкие будут пропущены. Элементы, сопоставленные в конфигурациях более высокого уровня, перезаписываются в конфигурациях более низкого уровня, если они соответствуют тем же данным логов. Если ни одно правило не сопоставлено, файл не отправляется.

Варианты использования

Изучите следующие варианты использования для приема логов из сред Kubernetes с использованием Ключ-АСТРОМ. Настроив прием логов с различными сопоставителями, вы можете контролировать, какие логи будут собираться в системе. Приведенные ниже варианты использования предлагают руководство по настройке Ключ-АСТРОМ для сбора логов на основе ваших конкретных потребностей в мониторинге, будь то из определенного пространства имен, контейнера или других критериев.

Принимать все логи из определенного пространства имен

  1. Перейдите в раздел Настройки и выберите Мониторинг логов > Пользовательская конфигурация источников логов (Set up log ingest).
  2. Выберите Добавить правило и укажите имя конфигурации в поле Название правила. Убедитесь, что кнопка Включить в хранилище включена, чтобы логи, соответствующие этой конфигурации, сохранялись в Ключ-АСТРОМ.
  3. Выберите Добавить условие.
  4. В раскрывающемся списке атрибутов сопоставления выберите имя пространства имен K8s .
  5. Выберите пространство имен из раскрывающегося списка в поле Значение и выберите Добавить сопоставитель.
  6. Выберите Сохранить изменения.

Теперь вы можете анализировать логи в мониторинге логов или блокнотах после выбора соответствующего пространства имен. Вы также можете найти логи в контексте в приложении Kubernetes, выбрав вкладку Логи.

Принимать логи из определенного пространства имен и контейнера

  1. Перейдите в раздел Настройки и выберите Мониторинг логов > Пользовательская конфигурация источников логов (Set up log ingest).
  2. Выберите Добавить правило и укажите имя конфигурации в поле Название правила. Убедитесь, что кнопка Включить в хранилище включена, чтобы логи, соответствующие этой конфигурации, сохранялись в Ключ-АСТРОМ.
  3. Выберите Добавить условие.
  4. В раскрывающемся списке атрибутов сопоставления выберите имя пространства имен K8s.
  5. Выберите пространство имен из раскрывающегося списка в поле Значение и выберите Добавить сопоставитель.
  6. Добавьте новый сопоставитель, на этот раз выберите имя контейнера K8s и введите имя контейнера в поле Значение. На этом этапе конфигурации можно добавить несколько имен контейнеров.
  7. Выберите Сохранить изменения.

Теперь вы можете анализировать логи в мониторинге логов или блокнотах после выбора правильного пространства имен и контейнера. Вы также можете найти логи в контексте в приложении Kubernetes, выбрав вкладку Логи.

Принимать все логи Kubernetes, за исключением определенных пространств имен

  1. Перейдите в раздел Настройки и выберите Мониторинг логов > Пользовательская конфигурация источников логов (Set up log ingest).
  2. Выберите Добавить правило и укажите имя конфигурации в поле Название правила. Убедитесь, что кнопка Включить в хранилище включена, чтобы логи, соответствующие этой конфигурации, сохранялись в Ключ-АСТРОМ.
  3. Выберите Добавить условие.
  4. В раскрывающемся списке атрибутов сопоставления выберите имя пространства имен K8s.
  5. Вставьте звездочку (*) в поле Значение в качестве заполнителя для всех доступных пространств имен кластера.
  6. Выберите Добавить сопоставление.
  7. Выберите Сохранить изменения.
  8. Вернитесь на экран Пользовательская конфигурация источников логов , добавьте еще одно правило и выберите опцию «Исключить из хранилища» .
  9. В поле Значение добавьте пространства имен, которые вы хотите исключить при приеме логов Kubernetes.
  10. Выберите Добавить сопоставление.
  11. Выберите Сохранить изменения.

REST-API

Вы можете использовать API настроек для управления правилами приема логов:

  • Просмотреть схему;
  • Список сохраненных объектов конфигурации;
  • Просмотр отдельного объекта конфигурации;
  • Создать новый, отредактировать или удалить существующий объект конфигурации.

Чтобы проверить текущую версию схемы для правил приема логов, выведите список всех доступных схем и найдите идентификатор схемы builtin:logmonitoring.log-storage-settings.

Объекты правил приема журналов можно настроить для следующих областей:

  • tenant– объект конфигурации влияет на все хосты данного арендатора.
  • host_group– объект конфигурации влияет на все хосты, назначенные в данную группу хостов.
  • host– объект конфигурации влияет только на данный хост.

Чтобы создать правило приема логов с помощью API:

  1. Создайте токен доступа с областями действия (Параметры записи (settings.write) и Параметры чтения (settings.read).
  2. Используйте конечную точку GET a schema , чтобы узнать формат JSON, необходимый для публикации вашей конфигурации. Идентификатор схемы правил приема логов ( schemaId) — builtin:logmonitoring.log-storage-settings. Вот пример полезной нагрузки JSON с правилами приема журнала:
{

  "items": [

    {

      "objectId": "vu9U3hXa3q0AAAABACpidWlsdGluOmxvZ21vbml0b3JpbmcubG9nLXN0b3JhZ2Utc2V0dGluZ3MABEhPU1QAEEFEMDVFRDZGQUUxNjQ2MjMAJDZkZGU3YzY5LTMzZjEtMzNiZC05ZTAwLWZlNDFmMjUxNzUzY77vVN4V2t6t",

      "value": {

        "enabled": true,

        "config-item-title": "Send kube-system logs",

        "send-to-storage": true,

        "matchers": [

          {

            "attribute": "k8s.container.name",

            "operator": "MATCHES",

            "values": [

              "kubedns",

              "kube-proxy"

            ]

          },

          {

            "attribute": "k8s.namespace.name",

            "operator": "MATCHES",

            "values": [

              "kube-system"

            ]

          }

        ]

      }

    }

  ],

  "totalCount": 1,

  "pageSize": 100

}

Примеры

Приведенные ниже примеры демонстрируют результаты различных комбинаций правил и сопоставителей.

Пример 1: Прием всех логов из определенного пространства имен

Для этой задачи требуется установить одно правило с одним сопоставителем.

[{

  "schemaId": "builtin:logmonitoring.log-storage-settings",

  "scope": "tenant",

  "value": {

    "enabled": true,

    "config-item-title": "All logs from kube-system namespace",

    "send-to-storage": true,

    "matchers": [

      {

        "attribute": "k8s.namespace.name",

        "operator": "MATCHES",

        "values": [

          "kube-system"

        ]

      }

    ]

  }

}]

Пример 2: Отправка логов из определенного пространства имен и контейнеров с содержимым, содержащим «ERROR»

Для этой задачи требуется установить одно правило с тремя сопоставителями.

[{

  "schemaId": "builtin:logmonitoring.log-storage-settings",

  "scope": "tenant",

  "value": {

    "enabled": true,

    "config-item-title": "Error logs from kube-proxy and kube-dns containers",

    "send-to-storage": true,

    "matchers": [

      {

        "attribute": "k8s.namespace.name",

        "operator": "MATCHES",

        "values": [

          "kube-system"

        ]

      },

      {

        "attribute": "k8s.container.name",

        "operator": "MATCHES",

        "values": [

          "kubedns",

          "kube-proxy"

        ]

      },

      {

        "attribute": "log.content",

        "operator": "MATCHES",

        "values": [

          "*ERROR*"

        ]

      }

    ]

  }

}]

Пример 3: Прием всех логов Kubernetes, за исключением определенных пространств имен в определенной области действия группы хостов

Для решения этой задачи необходимо установить два правила.

[{

  "schemaId": "builtin:logmonitoring.log-storage-settings",

  "scope": "HOST_GROUP-1D91E46493049D07",

  "value": {

    "enabled": true,

    "config-item-title": "Exclude logs from kube-system namespace",

    "send-to-storage": false,

    "matchers": [

      {

        "attribute": "k8s.namespace.name",

        "operator": "MATCHES",

        "values": [

          "kube-system"

        ]

      }

    ]

  }

},{

  "schemaId": "builtin:logmonitoring.log-storage-settings",

  "scope": "HOST_GROUP-1D91E46493049D07",

  "value": {

    "enabled": true,

    "config-item-title": "All Kubernetes logs",

    "send-to-storage": true,

    "matchers": [

      {

        "attribute": "k8s.namespace.name",

        "operator": "MATCHES",

        "values": [

          "*"

        ]

      }

    ]

  }

}]