Мы запускаем в Azure кластер Kubernets (AKS). Теперь у нас есть некий Docker-контейнер, который записывает важные для нас файлы журналов, поэтому нам нравится хранить их в пространстве журналов Azure. Собирается то же пространство, что и логи консоли.
К сожалению, мы не можем изменить программное обеспечение для записи на консоль. Есть ли способы смонтировать файл журнала и отправить его в пространство журнала Azure?
С наилучшими пожеланиями Т
Вместо этого рассмотрите возможность задать вопросы системному администратору на serverfault.com. Stack Overflow предназначен для вопросов по программированию.
Вы можете отправить содержимое файла журнала контейнера k8s в рабочую область Azure Log Analytics. Создайте свое рабочее пространство, в моем случае это myLogAnalyticsWorkspace. Включить мониторинг кластера
az aks enable-addons --resource-group arkorg --name test --addons monitoring --workspace-resource-id /subscriptions/abcd-efg-hijk-lmnop-qrst/resourceGroups/arkorg/providers/Microsoft.OperationalInsights/workspaces/myLogAnalyticsWorkspace
Создайте ConfigMap в пространстве имен kube-system
, чтобы указать журналы, которые вы хотите собирать из файлов журналов вашего контейнера.
apiVersion: v1
kind: ConfigMap
metadata:
name: container-azm-ms-agentconfig
namespace: kube-system
data:
schema-version: v1
config-version: ver1
logs: |
[
{
"file": "/var/log/nginx/access.log",
"log-group": "nginx_access_logs",
"interval": 60
},
{
"file": "/var/log/nginx/error.log",
"log-group": "nginx_error_logs",
"interval": 60
}
]
и применить
kubectl apply -f custom-log-configmap.yaml
Измените YAML-файл развертывания соответствующим образом, чтобы обеспечить доступность каталога файлов журнала в вашем контейнере для агента мониторинга.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
volumeMounts:
- name: log-volume
mountPath: /var/log/nginx
volumes:
- name: log-volume
emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: localhost
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-service
port:
number: 80
проверьте то же самое
kubectl exec -it nginx-deployment-69bf4f8b9-vds6d -- sh
ссылка-
спасибо за Ваш ответ. Мне нужно время, чтобы проверить это. Вернусь и дам отзыв!
Я нашел другое решение своей проблемы. Но данный ответ выглядит правильным. Большое спасибо!
Вы можете использовать агент Azure Log Analytics для сбора журналов из контейнеров Docker и отправки их в пространство журналов Azure. Агент можно установить на компьютер с Linux или Windows, и он может собирать журналы из различных источников, включая контейнеры Docker.