Облачная платформаAdvanced

Использование ICAgent для сбора журналов контейнеров

Язык статьи: Русский
Показать оригинал
Страница переведена автоматически и может содержать неточности. Рекомендуем сверяться с английской версией.

CCE позволяет использовать ICAgent для сбора журналов контейнеров рабочих нагрузок. При создании узла ICAgent (DaemonSet с именем icagent в пространстве имён kube-system кластера) устанавливается по умолчанию. Вы можете использовать ICAgent для сбора журналов и отправки их в места хранения, описанные в следующей таблице.

Место хранения журналов

Собираемое содержимое

Метод настройки

AOM (Этот режим не рекомендуется, так как он более не развивается.)

- Журналы stdout контейнера

- Журналы файлов контейнера

  • Журналы файлов контейнера: создайте политику сбора в рабочей нагрузке. Подробности см. Using ICAgent to Collect Container Logs and Report Them to AOM.
  • Журналы stdout контейнера: включите или отключите Send stdout Logs to AOM 1.0 в Monitoring. Рекомендуется отключить его.

LTS

- Журналы stdout контейнера

- Журналы файлов контейнера

- Журналы узла

- События Kubernetes

Создайте политику сбора в LTS.

Ограничения

ICAgent собирает только текстовые файлы журналов в форматах .log, .trace и .out.

Использование консоли

  1. При creating a workload выберите Logging в Container Information.
  2. Нажмите , чтобы добавить политику журналирования.

    В качестве примера используется Nginx. Политики журналирования различаются в зависимости от рабочих нагрузок.

  3. Set Volume Type to hostPath or emptyDir.

    Table 1 Параметры настройки политики журналирования

    Параметр

    Описание

    Volume Type

    • hostPath: Путь хоста монтируется в указанный путь контейнера (путь монтирования). После монтирования вы можете просматривать журналы контейнера, сохранённые там.
    • emptyDir: Временный путь узла монтируется в указанный путь (путь монтирования). После монтирования любые журналы во временном пути, которые не переданы в AOM сборщиком, будут потеряны при удалении pod.

    hostPath

    Введите путь к хосту, например, /var/paas/sys/log/nginx.

    Mount Path

    Путь контейнера (например, /tmp), в который будут монтироваться ресурсы хранилища.

    NOTICE:
    • Не монтируйте том в системный каталог, такой как / или /var/run, иначе возникнет исключение. Монтируйте том в пустой каталог. Если каталог не пуст, убедитесь, что в нём нет файлов, влияющих на запуск контейнера. Если такие файлы присутствуют, они будут заменены, что приведёт к сбою запуска контейнера или созданию нагрузки.
    • Если контейнер смонтирован в каталог с высоким уровнем риска, используйте учётную запись с минимальными правами для запуска контейнера. В противном случае файлы с высоким уровнем риска на хосте могут быть повреждены.
    • AOM собирает только первые 20 журналов, изменённых недавно. По умолчанию он собирает журналы из 2 уровней подкаталогов.
    • AOM собирает только текстовые файлы журналов в форматах .log, .trace и .out в путях монтирования.
    • Подробную информацию о том, как установить разрешения для точек монтирования в контейнере, см. Configure a Security Context for a Pod or Container.

    Extended Host Path

    Этот параметр обязателен только в том случае, если Volume Type установлен в значение hostPath.

    Расширенные пути хоста содержат идентификаторы pod или имена контейнеров для различения разных контейнеров, в которые монтируется путь хоста.

    К оригинальному каталогу/подкаталогу тома добавляется каталог третьего уровня. Вы можете легко получить файлы, созданные одним Pod.

    • None: No extended path is configured.
    • PodUID: ID of a pod.
    • PodName: имя pod.
    • PodUID/ContainerName: ID pod или имя контейнера.
    • PodName/ContainerName: имя pod или контейнера.

    Collection Path

    Collection path сужает область сбора до указанных журналов.

    • Если collection path не указан, файлы журналов в форматах .log, .trace и .out будут собраны из текущего пути.
    • Ввод ** указывает, что все файлы журналов в форматах .log, .trace и .out будут рекурсивно собраны из указанного пути и всех подкаталогов глубиной до пяти уровней.
    • Ввод * указывает на нечеткое совпадение.

    Пример: Collection path /tmp/**/test*.log указывает, что все файлы .log с префиксом test будут собраны из /tmp и подкаталогов глубиной до пяти уровней.

    ВНИМАНИЕ:

    Убедитесь, что версия ICAgent 5.12.22 или новее.

    Log Dump

    Log dump относится к ротации файлов журналов на локальном хосте.

    • Enable: AOM сканирует файлы журналов каждую минуту. Когда размер файла журнала превышает 50 МБ, он немедленно выгружается. Новый файл .zip создаётся в каталоге, где находится файл журнала. Для файла журнала AOM хранит только последние 20 файлов .zip. Когда количество файлов .zip превышает 20, более ранние файлы .zip будут удалены.
    • Disable: AOM не выгружает файлы журналов.
    ПРИМЕЧАНИЕ:
    • AOM вращает файлы журналов с помощью copytruncate. Перед включением log dumping убедитесь, что файлы журналов записываются в режиме append. В противном случае могут возникнуть file holes.
    • В настоящее время основные компоненты журналирования, такие как Log4j и Logback, поддерживают log file rotation. Если вы уже настроили rotation для файлов журналов, пропустите конфигурацию. В противном случае могут возникнуть конфликты.
    • Рекомендуется настроить log file rotation для ваших собственных сервисов, чтобы гибко контролировать размер и количество rolled файлов.

  4. нажмите OK.

Пример YAML

Вы можете задать путь хранения журналов контейнера, определив файл YAML.

Как показано ниже, том emptyDir монтируется в /var/log/nginx. Таким образом, ICAgent собирает журналы в /var/log/nginx. policy — это пользовательское поле CCE, позволяющее ICAgent идентифицировать и собирать журналы.

apiVersion: apps/v1
kind: Deployment
metadata:
name: testlog
namespace: default
spec:
selector:
matchLabels:
app: testlog
template:
replicas: 1
metadata:
labels:
app: testlog
spec:
containers:
- image: 'nginx:alpine'
name: container-0
resources:
requests:
cpu: 250m
memory: 512Mi
limits:
cpu: 250m
memory: 512Mi
volumeMounts:
- name: vol-log
mountPath: /var/log/nginx
policy:
logs:
rotate: ''
volumes:
- emptyDir: {}
name: vol-log
imagePullSecrets:
- name: default-secret

Ниже показано, как использовать том hostPath. По сравнению с emptyDir тип volumes изменяется на hostPath, и путь на хосте необходимо настроить для этого тома hostPath. В следующем примере /tmp/log на хосте монтируется в /var/log/nginx. Таким образом, ICAgent может собирать журналы в /var/log/nginx, а журналы по‑прежнему хранятся в /tmp/log.

apiVersion: apps/v1
kind: Deployment
metadata:
name: testlog
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: testlog
template:
metadata:
labels:
app: testlog
spec:
containers:
- image: 'nginx:alpine'
name: container-0
resources:
requests:
cpu: 250m
memory: 512Mi
limits:
cpu: 250m
memory: 512Mi
volumeMounts:
- name: vol-log
mountPath: /var/log/nginx
readOnly: false
extendPathMode: PodUID
policy:
logs:
rotate: Hourly
annotations:
pathPattern: '**'
volumes:
- hostPath:
path: /tmp/log
name: vol-log
imagePullSecrets:
- name: default-secret
Table 2 Описание параметра

Параметр

Описание

Примечания

extendPathMode

Расширенный путь хоста

Расширенные пути хоста содержат идентификаторы pod или имена контейнеров, чтобы различать разные контейнеры, в которые монтируется путь хоста.

К оригинальному каталогу тома/подкаталогу добавляется каталог уровня‑3. Вы можете легко получить файлы, выводимые отдельным Pod.

  • None: Расширенный путь не настроен.
  • PodUID: Идентификатор pod.
  • PodName: имя pod.
  • PodUID/ContainerName: Идентификатор pod или имя контейнера.
  • PodName/ContainerName: имя pod или контейнера.

policy.logs.rotate

Дамп логов

Дамп логов относится к ротации лог‑файлов на локальном хосте.

  • Enable: AOM сканирует лог‑файлы каждую минуту. Когда размер лог‑файла превышает 50 МБ, он сразу же дампится. В каталоге, где находится лог‑файл, создаётся новый .zip‑файл. Для лог‑файла AOM хранит только последние 20 .zip‑файлов. Когда количество .zip‑файлов превышает 20, более ранние .zip‑файлы удаляются. После завершения дампа лог‑файл в AOM будет очищен.
  • Disable: AOM не выполняет дамп лог‑файлов.
ПРИМЕЧАНИЕ:
  • AOM ротает лог‑файлы с помощью copytruncate. Перед включением дампа логов убедитесь, что лог‑файлы записываются в режиме добавления. В противном случае могут возникнуть пробелы в файлах.
  • В настоящее время основные компоненты журналирования, такие как Log4j и Logback, поддерживают ротацию лог‑файлов. Если вы уже настроили ротацию лог‑файлов, пропустите конфигурацию. В противном случае могут возникнуть конфликты.
  • Рекомендуется настроить ротацию файлов журналов для ваших собственных сервисов, чтобы гибко контролировать размер и количество архивных файлов.

policy.logs.annotations.pathPattern

Путь сбора

Путь сбора ограничивает область сбора указанными журналами.

  • Если путь сбора не указан, файлы журналов в форматах .log, .trace и .out будут собраны из текущего пути.
  • Ввод ** указывает, что все файлы журналов в форматах .log, .trace и .out будут рекурсивно собраны из указанного пути и всех подкаталогов глубиной до пяти уровней.
  • Ввод * указывает на нечеткое совпадение.

Пример: Путь сбора /tmp/**/test*.log указывает, что все файлы .log с префиксом test будут собраны из /tmp и подкаталогов глубиной до пяти уровней.

CAUTION:

Убедитесь, что версия ICAgent 5.12.22 или новее.

Просмотр журналов

После настройки пути сбора журналов и создания рабочей нагрузки ICAgent собирает файлы журналов из указанного пути. Сбор занимает около 1 минуты.

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

Вы также можете просматривать журналы в консоли AOM.

Вы также можете выполнить команду kubectl logs, чтобы просмотреть stdout контейнера.

  • Просмотрите логи указанного pod.
    kubectl logs <pod_name> -n <namespace>
  • Просмотрите логи указанного pod в реальном времени.
    kubectl logs -f <pod_name> -n <namespace>
  • Просмотрите логи указанного container в указанном pod.
    kubectl logs <pod_name> -c <container_name> -n <namespace>
  • Просмотрите логи указанного container в указанном pod в реальном времени.
    kubectl logs -f <pod_name> -c <container_name> -n <namespace>