Используйте awslogs с kubernetes «изначально»

#amazon-web-services #kubernetes #amazon-cloudwatchlogs

#amazon-веб-сервисы #kubernetes #amazon-cloudwatchlog

Вопрос:

  1. Я придумал способ настройки k8s для использования журналов aws без какой-либо сторонней службы / приложения. Все, что вам нужно сделать, это добавить следующие строки в свой мастер.файл 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}}
  
  1. Последняя строка является самой важной, и она переименует поток журналов для каждого модуля во что-то читаемое вместо хэша docker.

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

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

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

  5. Я пробовал несколько способов манипулирования значением ‘tag’ (например, tag ={{ с разделением .Имя «_» }}{{ индекс . 2 }}{{end}} ), но не удалось выполнить операцию обновления.

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

Ответ №1:

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

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

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

Когда указаны как awslogs-stream, так и tag, значение, указанное для awslogs-stream, переопределяет шаблон, указанный с помощью tag .

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

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

Комментарии:

1. Как вы можете видеть в 6 и 7, параметр ‘tag’ уже используется. Что не работает, так это более сложный шаблон, подобный этому: {{ with split .Name "_" }}{{ index . 2 }}{{end}}