Используйте awslogs с kubernetes «изначально» - PullRequest
2 голосов
/ 10 апреля 2019
  1. Я придумал способ настроить k8s для использования журналов aws без каких-либо сторонних сервисов / приложений.Все, что вам нужно сделать, это добавить следующие строки в ваш файл master.yaml:
spec:
  additionalPolicies:
    master: |
      [
        {
          "Effect": "Allow",
          "Action": ["logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents"],
          "Resource": ["*"]
        }
      ]
    node: |
      [
        {
          "Effect": "Allow",
          "Action": ["logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents"],
          "Resource": ["*"]
        }
      ]
  docker:
    logDriver: awslogs
    logOpt:
    - awslogs-region=eu-west-1
    - awslogs-group=<group-name> # make sure that this group already exist (create it manually)
    - tag={{.Name}}

Последняя строка является самой важной, и она переименует поток журнала для каждого модуля в нечто читаемое вместо хэша докера.

само собой разумеетсянеобходимо обновить кластер, чтобы изменения вступили в силу.(копировать обновление кластера $ {CLUSTER-NAME} --yes)

Вот и все.Откройте AWS Cloudwatch и наслаждайтесь своими журналами: -)

С учетом сказанного у меня есть одна проблема.Имя потока журнала содержит гораздо больше информации, чем я хотел бы.Любая идея, как обрезать имя потока журнала в просто хорошее имя pod?

Я пробовал несколько способов манипулирования значением 'tag' (например, tag = {{with split .Name"_"}} {{index. 2}} {{end}}), но не удалось выполнить операцию обновления.

Пример имени потока журнала: k8s_POD-NICE-NAME_POD-NICE-NAME-67c77758bf-8knn8_mind_24ed4160-5b5e-11e9-b53a-0a02b6d80d7c_1

1 Ответ

0 голосов
/ 10 апреля 2019

В этом случае вы используете драйвер Docker для регистрации.В этом случае вы должны указать awslogs-stream или параметры тега, чтобы изменить имя потока по умолчанию.Тег немного более гибкий, и я думаю, что он будет лучше соответствовать вашим требованиям, поскольку он интерпретирует разметку шаблона Go.Таким образом, вместо идентификатора контейнера вы можете получить более понятное имя потока.

Из документации докера:

Укажите тег в качестве альтернативы опции awslogs-stream.тег интерпретирует разметку шаблона Go, например {{.ID}}, {{.FullID}} или {{.Name}} докер. {{. ID}}.Для получения подробной информации обо всех поддерживаемых заменах шаблонов см. Документацию по опциям тегов.

Если указаны и awslogs-stream, и тег, значение, предоставленное для awslogs-stream, переопределяет шаблон, указанный в теге.

Еслине указан, идентификатор контейнера используется в качестве потока журнала.

См. здесь параметры тегов и awslogs-stream: https://docs.docker.com/config/containers/logging/awslogs/

...