使用Logtail采集Kubernetes上挂载的NAS日志
采集k8s掛載Nas后的日志
該文檔主要介紹使用logtail以兩種不同的方式進行k8s掛載Nas后的日志采集。兩種采集方式的實現原理是一樣的,都是通過將Logtail和業務容器掛載到相同的NAS上,使Logtail和業務容器的日志數據共享,以此實現日志采集。下面是兩種采集方式的各自特點:
1.?Sidecar NAS采集方式
通過?鏈接?使用PV&PVC的方式配置掛載Nas的nas-pvc
- 步驟一 創建pv
- 步驟二 創建pvc
- 步驟三 根據下面的yaml模板創建含有logtail的Pod,進行單個Pod的內部采集
sideCar模式實驗yaml內容:
apiVersion: batch/v1 kind: Job metadata:name: nginx-log-sidecar1-demo spec:template:metadata:name: nginx-log-sidecar-demospec:# volumes配置volumes:- name: nginx-logpersistentVolumeClaim:claimName: nas-pvccontainers:# 主容器配置- name: nginx-log-demoimage: registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latestcommand: ["/bin/mock_log"]args: ["--log-type=nginx", "--stdout=false", "--stderr=true", "--path=/var/log/nginx/access.log", "--total-count=1000000000", "--logs-per-sec=100"]volumeMounts:- name: nginx-logmountPath: /var/log/nginx# Logtail的Sidecar容器配置- name: logtailimage: registry.cn-hangzhou.aliyuncs.com/log-service/logtail:latestenv:# user id- name: "ALIYUN_LOGTAIL_USER_ID"value: "${your_aliyun_user_id}"# user defined id- name: "ALIYUN_LOGTAIL_USER_DEFINED_ID"value: "${your_machine_group_user_defined_id}"# config file path in logtail's container- name: "ALIYUN_LOGTAIL_CONFIG"value: "/etc/ilogtail/conf/${your_region_config}/ilogtail_config.json"# env tags config- name: "ALIYUN_LOG_ENV_TAGS"value: "_pod_name_|_pod_ip_|_namespace_|_node_name_|_node_ip_"- name: "_pod_name_"valueFrom:fieldRef:fieldPath: metadata.name- name: "_pod_ip_"valueFrom:fieldRef:fieldPath: status.podIP- name: "_namespace_"valueFrom:fieldRef:fieldPath: metadata.namespace- name: "_node_name_"valueFrom:fieldRef:fieldPath: spec.nodeName- name: "_node_ip_"valueFrom:fieldRef:fieldPath: status.hostIP# 和主容器共享volumevolumeMounts:- name: nginx-logmountPath: /var/log/nginx# 健康檢查livenessProbe:exec:command:- /etc/init.d/ilogtaild- statusinitialDelaySeconds: 30periodSeconds: 30restartPolicy: "Never"SLS控制臺采集配置設置如下圖:
- 日志路徑與被采集容器的日志所在路徑一致
- 注意:由于NAS路徑已經掛載到了Logtail容器上,所以不需要打開docker文件的按鈕
采集上來的系統默認字段含義:
__source__: pod容器內部IP __tag__:__hostname__: pod名稱 __tag__:__path__: 日志路徑 __tag__:__receive_time__: 采集時間 __tag__:__user_defined_id__: 用戶自定義標識 __tag__:_namespace_: pod所屬namaspace __tag__:_node_ip_: pod所在Node的IP地址 __tag__:_node_name_: pod所屬Node的name __tag__:_pod_ip_: pod容器內部IP __tag__:_pod_name_: pod名稱用戶參數:
?
| 參數 | 說明 |
| ${your_region_config} | 該參數由日志服務Project所在Region以及網絡類型決定,請根據網絡類型輸入正確的格式。包括:
其中,region為?表一,請根據Project地域選擇正確的參數。 |
| ${your_aliyun_user_id} | 用戶標識,請替換為您的阿里云主賬號用戶ID。主賬號用戶ID為字符串形式,如何查看ID請參考?用戶標識配置中的2.1節。 說明?用戶標識一定是?主賬號用戶ID,子賬號ID沒有任何意義。 |
| ${your_machine_group_user_defined_id} | 您集群的機器組自定義標識。需確保該標識在您的日志服務所在Region內唯一。詳細內容可參考?創建用戶自定義標識機器組。 |
?
2.?一個Logtail采集所有POD的NAS數據
注意項:副本數spec.replicas只能為1,不能更多,多了會重復采集。
首先,創建一個logtail的deployment,以下是本次使用的模板:
apiVersion: apps/v1 kind: Deployment metadata:name: logtail-deploymentnamespace: kube-systemlabels:k8s-app: nas-logtail-collecter spec:replicas: 1selector:matchLabels:k8s-app : nas-logtail-collectertemplate:metadata:name: logtail-deploymentlabels:k8s-app : nas-logtail-collecterspec:containers:# Logtail的配置- name: logtailimage: registry.cn-hangzhou.aliyuncs.com/log-service/logtail:latestenv:# aliuid- name: "ALIYUN_LOGTAIL_USER_ID"value: "${your_aliyun_user_id}"# user defined id- name: "ALIYUN_LOGTAIL_USER_DEFINED_ID"value: "${your_machine_group_user_defined_id}"# config file path in logtail's container- name: "ALIYUN_LOGTAIL_CONFIG"value: "/etc/ilogtail/conf/${your_region_config}/ilogtail_config.json"volumeMounts:- name: nginx-logmountPath: /var/log/nginx# volumes配置volumes:- name: nginx-logpersistentVolumeClaim:claimName: pvc-test-nginx- __注意:__這里的 claimName: pvc-test-nginx 以及mountPath: /var/log/nginx 是將logtail的/var/log/nginx掛載了Nas下的/nginx文件夾
- 相關參數設置請參考方案1中的表格說明
logtail運行成功之后,可以在SLS控制臺根據模板中的ALIYUN_LOGTAIL_USER_DEFINED_ID創建對應的機器組,請參考方案1中的表格說明。
這里新建2個Pod來測試采集是否成功,其中一個POD的模板為:
apiVersion: v1 kind: Pod metadata:name: "test-nginx-2" spec:containers:- name: "nginx-log-demo"image: "registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest"command: ["/bin/mock_log"]args: ["--log-type=nginx", "--stdout=false", "--stderr=true", "--path=/var/log/nginx/access.log", "--total-count=1000000000", "--logs-per-sec=100"]volumeMounts:- name: "nas2"mountPath: "/var/log/nginx"volumes:- name: "nas2"flexVolume:driver: "alicloud/nas"options:server: "Nas掛載地址"path: "/nginx/test2"vers: "4.0"另一個Pod將 /var/log/nginx 掛載在了 /nginx/test1 目錄下;結合logtail的掛載情況,現在兩個Pod分別掛載在 /nginx/test1 和 /nginx/test2,而logtail掛載在了 /nginx 下。
最后配置logtail的采集配置
因為logtail也掛載了相同的Nas,所以logtail只需要采集自身文件夾下的日志就可以了,這里的是否為docker文件選項關閉。
注意:由于NAS路徑已經掛載到了Logtail容器上,所以不需要打開docker文件的按鈕
?
#阿里云開年Hi購季#幸運抽好禮!
點此抽獎:https://www.aliyun.com/acts/product-section-2019/yq-lottery?utm_content=g_1000042901
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的使用Logtail采集Kubernetes上挂载的NAS日志的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MariaDB强势席卷DB-Engine
- 下一篇: 生物智能与AI——关乎创造、关乎理解(下