#amazon-web-services #kubernetes #amazon-cloudwatchlogs
#amazon-веб-сервисы #kubernetes #amazon-cloudwatchlog
Вопрос:
- Я придумал способ настройки 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}}
-
Последняя строка является самой важной, и она переименует поток журналов для каждого модуля во что-то читаемое вместо хэша docker.
-
само собой разумеется, что вам необходимо обновить кластер, чтобы изменения вступили в силу. (kops обновляет cluster $ {CLUSTER-NAME} — да)
-
Вот и все. Откройте AWS Cloudwatch и наслаждайтесь своими журналами 🙂
-
С учетом сказанного, у меня есть одна проблема. Имя потока журнала содержит гораздо больше информации, чем я бы хотел. Есть идеи, как обрезать имя потока журнала до простого имени pod nice?
-
Я пробовал несколько способов манипулирования значением ‘tag’ (например, tag ={{ с разделением .Имя «_» }}{{ индекс . 2 }}{{end}} ), но не удалось выполнить операцию обновления.
-
пример имени потока журналов: 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}}