通過Sidecar方式采集Kubernetes容器文本日志
本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業(yè)務(wù)造成影響,請務(wù)必仔細(xì)閱讀。
如果需要每個Pod使用單獨(dú)的Logtail實例來收集Pod內(nèi)所有容器的日志,可以使用Sidecar方式在Kubernetes集群上部署Logtail。本文介紹Sidecar方式采集容器文本日志的工作原理、使用限制、前提條件、操作步驟等信息。
工作原理
Sidecar模式
在Sidecar模式中,每個容器組(Pod)運(yùn)行一個Logtail容器,用于采集當(dāng)前容器組(Pod)所有容器(Containers)的日志。不同Pod的日志采集相互隔離。
為了采集同一Pod中其它容器的日志文件,需要通過共享存儲卷的方式來完成,即將同一份存儲卷分別掛載到業(yè)務(wù)容器和Logtail容器。Sidecar方式采集容器日志的更多信息,請參見Sidecar日志采集介紹和Sidecar模式示例。存儲卷的更多信息,請參見存儲基礎(chǔ)知識。
前提條件
已安裝Logtail組件。具體操作,請參見安裝Logtail組件(阿里云Kubernetes集群)。
安裝Logtail的主機(jī)需開放80(HTTP)端口和443(HTTPS)端口。ECS實例的端口由安全組規(guī)則控制,添加安全組規(guī)則的步驟請參見添加安全組規(guī)則。
目標(biāo)容器持續(xù)新增日志。Logtail只采集增量日志。如果下發(fā)logtail采集配置后,日志文件無更新,則Logtail不會采集該文件中的日志。更多信息,請參見讀取日志。
業(yè)務(wù)容器中待采集文件必須位于存儲卷中,且該存儲卷必須掛載到Logtail容器。
步驟一:為業(yè)務(wù)Pod注入Logtail容器
登錄Kubernetes集群。
創(chuàng)建一個YAML文件。
sidecar.yaml
為文件的示例名稱,請根據(jù)實際情況替換。vim sidecar.yaml
在YAML文件中輸入如下腳本,并根據(jù)實際情況設(shè)置其中的參數(shù)。
警告YAML模板中,所有帶有
${}
的占位符都需要替換為您環(huán)境中實際的值,其他參數(shù)禁止改動、刪除。apiVersion: batch/v1 kind: Job metadata: # 在這里添加 Job 元信息,比如 name 和 namespace name: ${job_name} namespace: ${namespace} spec: template: spec: restartPolicy: Never containers: # 業(yè)務(wù)容器 - name: ${main_container_name} image: ${main_container_image} command: ["/bin/sh", "-c"] args: - until [[ -f /tasksite/cornerstone ]]; do sleep 1; done; # 替換為業(yè)務(wù)容器的實際啟動命令 ${container_start_cmd}; retcode=$?; touch /tasksite/tombstone; exit $retcode volumeMounts: # 業(yè)務(wù)容器的日志目錄掛載到共享存儲卷 - name: ${shared_volume_name} mountPath: ${dir_containing_your_files} # 與 Logtail 容器交互的掛載點 - mountPath: /tasksite name: tasksite # Logtail sidecar 容器 - name: logtail image: ${logtail_image} command: ["/bin/sh", "-c"] args: - /etc/init.d/ilogtaild start; sleep 10; # 等待 Logtail 配置下載完成 touch /tasksite/cornerstone; until [[ -f /tasksite/tombstone ]]; do sleep 1; done; sleep 10; # 等待 Logtail 完成日志發(fā)送 /etc/init.d/ilogtaild stop; livenessProbe: exec: command: - /etc/init.d/ilogtaild - status initialDelaySeconds: 30 periodSeconds: 30 env: # 設(shè)置時區(qū)。請根據(jù)kubernetes集群所在地域,配置時區(qū),格式為"地區(qū)/城市"。如果是中國大陸,可以設(shè)置時區(qū)為Asia/Shanghai。 # 如果沒有正確配置時區(qū),可能導(dǎo)致原始日志與處理日志的時間標(biāo)簽不匹配,進(jìn)而將日志數(shù)據(jù)歸檔到錯誤的時間點。 - name: TZ value: "${timezone}" - name: ALIYUN_LOGTAIL_USER_ID value: "${your_aliyun_user_id}" - name: ALIYUN_LOGTAIL_USER_DEFINED_ID value: "${your_machine_group_user_defined_id}" - name: ALIYUN_LOGTAIL_CONFIG value: "/etc/ilogtail/conf/${your_region_config}/ilogtail_config.json" # 追加 Pod 環(huán)境信息作為日志標(biāo)簽 - name: "ALIYUN_LOG_ENV_TAGS" value: "_pod_name_|_pod_ip_|_namespace_|_node_name_|_node_ip_" # 獲取 Pod 和 Node 的信息 - 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 volumeMounts: # Logtail 容器的日志目錄掛載到共享存儲卷 - name: ${shared_volume_name} mountPath: ${dir_containing_your_files} # 與業(yè)務(wù)容器交互的掛載點 - mountPath: /tasksite name: tasksite volumes: # 定義空的共享存儲卷用于日志存儲 - name: ${shared_volume_name} emptyDir: {} # 定義存儲卷用于容器間通信 - name: tasksite emptyDir: medium: Memory
變量
說明
${your_aliyun_user_id}
設(shè)置為您的阿里云賬號ID。更多信息,請參見配置用戶標(biāo)識。
${your_machine_group_user_defined_id}
自定義設(shè)置機(jī)器組的自定義標(biāo)識,例如
nginx-log-sidecar
。重要請確保該標(biāo)識在您的Project所在地域內(nèi)唯一。
${your_region_config}
請根據(jù)日志服務(wù)Project所在地域和訪問的網(wǎng)絡(luò)類型填寫。其中,地域信息請參見安裝Logtail(Linux系統(tǒng))。
如果使用公網(wǎng)采集日志,格式為
region-internet
,例如華東 1(杭州)為cn-hangzhou-internet。如果使用阿里云內(nèi)網(wǎng)采集日志,格式為
region
。例如華東 1(杭州)為cn-hangzhou。
${logtail_image}
${shared_volume_name}
自定義設(shè)置卷的名稱。
重要volumeMounts
節(jié)點下的name
參數(shù)與volumes
節(jié)點下的name
參數(shù)需設(shè)置為一致,即確保Logtail容器和業(yè)務(wù)容器掛載相同的卷上。${dir_containing_your_files}
設(shè)置掛載路徑,即容器待采集文本日志所在目錄。
apiVersion: batch/v1 kind: Job metadata: # 在這里添加 Job 元信息,比如 name 和 namespace name: nginx-log-sidecar-demo namespace: default spec: template: metadata: # 在這里添加 Pod 元信息,比如 labels labels: app: nginx-logger spec: restartPolicy: Never containers: # 業(yè)務(wù)容器 - name: nginx image: nginx-test command: ["/bin/sh", "-c"] args: - until [[ -f /tasksite/cornerstone ]]; do sleep 1; done; # 替換為業(yè)務(wù)容器的實際啟動命令 nginx -g 'daemon off;'; retcode=$?; touch /tasksite/tombstone; exit $retcode volumeMounts: # 業(yè)務(wù)容器的日志目錄掛載到共享存儲卷 - name: nginx-logs mountPath: /var/log/nginx # 與 Logtail 容器交互的掛載點 - mountPath: /tasksite name: tasksite # 在這里定義業(yè)務(wù)容器的資源請求和限制 resources: limits: cpu: 500m memory: 512Mi requests: cpu: 10m memory: 30Mi # Logtail sidecar 容器 - name: logtail image: registry.cn-hangzhou.aliyuncs.com/log-service/logtail:v1.5.1.0-aliyun command: ["/bin/sh", "-c"] args: - /etc/init.d/ilogtaild start; sleep 10; # 等待 Logtail 配置下載完成 touch /tasksite/cornerstone; until [[ -f /tasksite/tombstone ]]; do sleep 1; done; sleep 10; # 等待 Logtail 完成日志發(fā)送 /etc/init.d/ilogtaild stop; livenessProbe: exec: command: - /etc/init.d/ilogtaild - status initialDelaySeconds: 30 periodSeconds: 30 resources: limits: cpu: 500m memory: 512Mi requests: cpu: 10m memory: 30Mi env: # 設(shè)置時區(qū)。請根據(jù)kubernetes集群所在地域,配置時區(qū),格式為"地區(qū)/城市"。如果是中國大陸,可以設(shè)置時區(qū)為Asia/Shanghai。 # 如果沒有正確配置時區(qū),可能導(dǎo)致原始日志與處理日志的時間標(biāo)簽不匹配,進(jìn)而將日志數(shù)據(jù)歸檔到錯誤的時間點。 - name: TZ value: "Asia/Shanghai" # 在這里替換為實際的環(huán)境變量值 - name: ALIYUN_LOGTAIL_USER_ID value: "20*******28" - name: ALIYUN_LOGTAIL_USER_DEFINED_ID value: "nginx-log-sidecar" - name: ALIYUN_LOGTAIL_CONFIG value: "/etc/ilogtail/conf/cn-hangzhou-internet/ilogtail_config.json" # 追加 Pod 環(huán)境信息作為日志標(biāo)簽 - name: "ALIYUN_LOG_ENV_TAGS" value: "_pod_name_|_pod_ip_|_namespace_|_node_name_|_node_ip_" # 獲取 Pod 和 Node 的信息 - 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 volumeMounts: # Logtail 容器的日志目錄掛載到共享存儲卷 - name: nginx-logs mountPath: /var/log/nginx # 與業(yè)務(wù)容器交互的掛載點 - mountPath: /tasksite name: tasksite volumes: # 定義空的共享存儲卷用于日志存儲 - name: nginx-logs emptyDir: {} # 定義存儲卷用于容器間通信 - name: tasksite emptyDir: medium: Memory
執(zhí)行如下命令使
sidecar.yaml
文件配置生效。sidecar.yaml
為文件名,請根據(jù)實際情況替換。kubectl apply -f sidecar.yaml
創(chuàng)建Logtail采集配置
通過CRD方式創(chuàng)建的配置,在控制臺上對其修改不會同步到CRD中。因此,如需修改由CRD創(chuàng)建的配置內(nèi)容,只能修改CRD資源,不要直接在控制臺操作,避免iLogtail采集配置不一致。
日志服務(wù)控制臺
登錄日志服務(wù)控制臺。
單擊控制臺右側(cè)的快速接入數(shù)據(jù),在接入數(shù)據(jù)區(qū)域單擊Kubernetes-文件卡片。
選擇目標(biāo)Project和Logstore,單擊下一步。選擇您在安裝Logtail組件時所使用的Project。Logstore為您自定義創(chuàng)建的Logstore。
在機(jī)器組配置頁面。
根據(jù)實際場景,單擊以下頁簽:
- 重要
不同頁簽的后續(xù)配置步驟不同,請根據(jù)實際需求正確選擇。
確認(rèn)目標(biāo)機(jī)器組已在應(yīng)用機(jī)器組列表中,然后單擊下一步。在ACK中安裝Logtail組件后,日志服務(wù)自動創(chuàng)建名為
k8s-group-${your_k8s_cluster_id}
的機(jī)器組,您可以直接使用該機(jī)器組。重要如果需要新建機(jī)器組,請單擊創(chuàng)建機(jī)器組,按照右側(cè)面板進(jìn)行創(chuàng)建。更多信息,請參見通過控制臺配置。
如果機(jī)器組心跳為FAIL,您可單擊自動重試。如果還未解決,請參見Logtail機(jī)器組無心跳進(jìn)行排查。
創(chuàng)建Logtail采集配置,單擊下一步創(chuàng)建Logtail采集配置,日志服務(wù)開始采集日志。
說明Logtail采集配置生效時間最長需要3分鐘,請耐心等待。
配置項
說明
配置名稱
Logtail配置名稱,在其所屬Project內(nèi)必須唯一。創(chuàng)建Logtail配置成功后,無法修改其名稱。
日志主題類型
選擇日志主題(Topic)的生成方式。更多信息,請參見日志主題。
機(jī)器組Topic:設(shè)置為機(jī)器組的Topic屬性,用于明確區(qū)分不同機(jī)器組產(chǎn)生的日志。
文件路徑提取:設(shè)置為文件路徑正則,則需要設(shè)置自定義正則,用正則表達(dá)式從路徑里提取一部分內(nèi)容作為Topic。用于區(qū)分不同源產(chǎn)生的日志。
自定義:自定義日志主題。
高級參數(shù)
其它可選的與配置全局相關(guān)的高級功能參數(shù),請參見創(chuàng)建Logtail流水線配置。
配置項
說明
日志樣例
待采集日志的樣例,請務(wù)必使用實際場景的日志。日志樣例可協(xié)助您配置日志處理相關(guān)參數(shù),降低配置難度。支持添加多條樣例,總長度不超過1500個字符。
[2023-10-01T10:30:01,000] [INFO] java.lang.Exception: exception happened at TestPrintStackTrace.f(TestPrintStackTrace.java:3) at TestPrintStackTrace.g(TestPrintStackTrace.java:7) at TestPrintStackTrace.main(TestPrintStackTrace.java:16)
多行模式
多行日志的類型:多行日志是指每條日志分布在連續(xù)的多行中,需要從日志內(nèi)容中區(qū)分出每一條日志。
自定義:通過行首正則表達(dá)式區(qū)分每一條日志。
多行JSON:每個JSON對象被展開為多行,例如:
{ "name": "John Doe", "age": 30, "address": { "city": "New York", "country": "USA" } }
切分失敗處理方式:
Exception in thread "main" java.lang.NullPointerException at com.example.MyClass.methodA(MyClass.java:12) at com.example.MyClass.methodB(MyClass.java:34) at com.example.MyClass.main(MyClass.java:?0)
對于以上日志內(nèi)容,如果日志服務(wù)切分失?。?/p>
丟棄:直接丟棄這段日志。
保留單行:將每行日志文本單獨(dú)保留為一條日志,保留為一共四條日志。
處理模式
處理插件組合,包括原生插件和拓展插件。有關(guān)處理插件的更多信息,請參見處理插件概述。
重要處理插件的使用限制,請以控制臺頁面的提示為準(zhǔn)。
2.0版本的Logtail:
原生處理插件可任意組合。
原生處理插件和擴(kuò)展處理插件可同時使用,但擴(kuò)展處理插件只能出現(xiàn)在所有的原生處理插件之后。
低于2.0版本的Logtail:
不支持同時添加原生插件和擴(kuò)展插件。
原生插件僅可用于采集文本日志。使用原生插件時,須符合如下要求:
第一個處理插件必須為正則解析插件、分隔符模式解析插件、JSON解析插件、Nginx模式解析插件、Apache模式解析插件或IIS模式解析插件。
從第二個處理插件到最后一個處理插件,最多包括1個時間解析處理插件,1個過濾處理插件和多個脫敏處理插件。
對于解析失敗時保留原始字段和解析成功時保留原始字段參數(shù),只有以下組合有效,其余組合無效。
只上傳解析成功的日志:
解析成功時上傳解析后的日志,解析失敗時上傳原始日志:
解析成功時不僅上傳解析后的日志,并且追加原始日志字段,解析失敗時上傳原始日志。
例如,原始日志
"content": "{"request_method":"GET", "request_time":"200"}"
解析成功,追加原始字段是在解析后日志的基礎(chǔ)上再增加一個字段,字段名為重命名的原始字段(如果不填則默認(rèn)為原始字段名),字段值為原始日志{"request_method":"GET", "request_time":"200"}
。
創(chuàng)建索引和預(yù)覽數(shù)據(jù),然后單擊下一步。日志服務(wù)默認(rèn)開啟全文索引。您也可以根據(jù)采集到的日志,手動創(chuàng)建字段索引,或者單擊自動生成索引,日志服務(wù)將自動生成字段索引。更多信息,請參見創(chuàng)建索引。
重要如果需要查詢?nèi)罩局械乃凶侄?,建議使用全文索引。如果只需查詢部分字段、建議使用字段索引,減少索引流量。如果需要對字段進(jìn)行分析(SELECT語句),必須創(chuàng)建字段索引。
單擊查詢?nèi)罩?/b>,系統(tǒng)將跳轉(zhuǎn)至Logstore查詢分析頁面。
您需要等待1分鐘左右,待索引生效后,才能在原始日志頁簽中,查看已采集到的日志。更多信息,請參見查詢和分析日志。
(推薦)CRD-AliyunPipelineConfig
創(chuàng)建Logtail采集配置
使用AliyunPipelineConfig,需要日志組件版本最低為0.5.1。
您只需要創(chuàng)建AliyunPipelineConfig CR即可創(chuàng)建iLogtail采集配置,創(chuàng)建完成后自動生效。對于通過CR創(chuàng)建的iLogtail采集配置,其修改只能通過更新相應(yīng)的CR來實現(xiàn)。
執(zhí)行如下命令創(chuàng)建一個YAML文件。
cube.yaml
為文件名,請根據(jù)實際情況替換。vim cube.yaml
在YAML文件輸入如下腳本,并根據(jù)實際情況設(shè)置其中的參數(shù)。
重要請確保
configName
字段值在安裝Logtail組件的Project中唯一。每個iLogtail采集配置必須單獨(dú)設(shè)置一個對應(yīng)的CR,如果多個CR關(guān)聯(lián)同一個Logtail配置,后配置的CR將不會生效。
AliyunPipelineConfig
的參數(shù),請參見【推薦】使用AliyunPipelineConfig管理采集配置。本文的iLogtail采集配置樣例包含基礎(chǔ)的文本日志采集功能,參數(shù)說明參見CreateLogtailPipelineConfig - 創(chuàng)建Logtail流水線配置。請確保config.flushers.Logstore參數(shù)配置的Logstore已存在,可以通過配置spec.logstore參數(shù)自動創(chuàng)建Logstore。
采集指定容器內(nèi)的單行文本日志
創(chuàng)建名為
example-k8s-file
的iLogtail采集配置,對于集群內(nèi)名稱包含app
的所有容器,以單行文本模式采集/data/logs/app_1
路徑下的test.LOG
文件,直接發(fā)送到名稱為
k8s-file
的Logstore,該Logstore屬于名稱為k8s-log-test
的Project。apiVersion: telemetry.alibabacloud.com/v1alpha1 # 創(chuàng)建一個 ClusterAliyunPipelineConfig kind: ClusterAliyunPipelineConfig metadata: # 設(shè)置資源名,在當(dāng)前Kubernetes集群內(nèi)唯一。該名稱也是創(chuàng)建出的iLogtail采集配置名 name: example-k8s-file spec: # 指定目標(biāo)project project: name: k8s-log-test # 創(chuàng)建用于存儲日志的 Logstore logstores: - name: k8s-file # 定義iLogtail采集配置 config: # 定義輸入插件 inputs: # 使用input_file插件采集容器內(nèi)文本日志 - Type: input_file # 容器內(nèi)的文件路徑 FilePaths: - /data/logs/app_1/**/test.LOG # 啟用容器發(fā)現(xiàn)功能。 EnableContainerDiscovery: true # 添加容器信息過濾條件,多個選項之間為“且”的關(guān)系。 ContainerFilters: # 指定待采集容器所在 Pod 所屬的命名空間,支持正則匹配。 K8sNamespaceRegex: default # 指定待采集容器的名稱,支持正則匹配。 K8sContainerRegex: ^(.*app.*)$ # 定義輸出插件 flushers: # 使用flusher_sls插件輸出到指定Logstore。 - Type: flusher_sls # 需要確保該 Logstore 存在 Logstore: k8s-file # 需要確保 endpoint 正確 Endpoint: cn-hangzhou.log.aliyuncs.com Region: cn-hangzhou TelemetryType: logs
采集所有容器內(nèi)的多行文本日志并正則解析
創(chuàng)建名為
example-k8s-file
的iLogtail采集配置,以多行文本模式采集集群內(nèi)所有容器內(nèi)的/data/logs/app_1
路徑下的test.LOG
文件,對采集到的數(shù)據(jù)進(jìn)行JSON解析,直接發(fā)送到名稱為k8s-file
的Logstore,該Logstore屬于名稱為k8s-log-test
的Project。下面樣例中的日志原文通過input_file插件讀取后格式為
{"content": "2024-06-19 16:35:00 INFO test log\nline-1\nline-2\nend"}
,會被正則解析插件解析為{"time": "2024-06-19 16:35:00", "level": "INFO", "msg": "test log\nline-1\nline-2\nend"}
apiVersion: telemetry.alibabacloud.com/v1alpha1 # 創(chuàng)建一個 ClusterAliyunPipelineConfig kind: ClusterAliyunPipelineConfig metadata: # 設(shè)置資源名,在當(dāng)前Kubernetes集群內(nèi)唯一。該名稱也是創(chuàng)建出的iLogtail采集配置名 name: example-k8s-file spec: # 指定目標(biāo)project project: name: k8s-log-test # 創(chuàng)建用于存儲日志的 Logstore logstores: - name: k8s-file # 定義iLogtail采集配置 config: # 日志樣例(可不填寫) sample: | 2024-06-19 16:35:00 INFO test log line-1 line-2 end # 定義輸入插件 inputs: # 使用input_file插件采集容器內(nèi)多行文本日志 - Type: input_file # 容器內(nèi)的文件路徑 FilePaths: - /data/logs/app_1/**/test.LOG # 啟用容器發(fā)現(xiàn)功能。 EnableContainerDiscovery: true # 開啟多行能力 Multiline: # 選擇自定義行首正則表達(dá)式模式 Mode: custom # 配置行首正則表達(dá)式 StartPattern: \d+-\d+-\d+.* # 定義處理插件 processors: # 使用正則解析插件解析日志 - Type: processor_parse_regex_native # 源字段名 SourceKey: content # 解析用的正則表達(dá)式,用捕獲組"()"捕獲待提取的字段 Regex: (\d+-\d+-\d+\s*\d+:\d+:\d+)\s*(\S+)\s*(.*) # 提取的字段列表 Keys: ["time", "level", "msg"] # 定義輸出插件 flushers: # 使用flusher_sls插件輸出到指定Logstore。 - Type: flusher_sls # 需要確保該 Logstore 存在 Logstore: k8s-file # 需要確保 endpoint 正確 Endpoint: cn-hangzhou.log.aliyuncs.com Region: cn-hangzhou TelemetryType: logs
執(zhí)行如下命令使iLogtail采集配置生效。iLogtail采集配置生效后,Logtail開始采集各個容器上的文本日志,并發(fā)送到日志服務(wù)中。
cube.yaml
為文件名,請根據(jù)實際情況替換。kubectl apply -f cube.yaml
重要采集到日志后,您需要先創(chuàng)建索引,才能在Logstore中查詢和分析日志。具體操作,請參見創(chuàng)建索引。
CRD-AliyunLogConfig
您只需要創(chuàng)建AliyunLogConfig CR即可創(chuàng)建iLogtail采集配置,創(chuàng)建完成后自動生效。對于通過CR創(chuàng)建的iLogtail采集配置,其修改只能通過更新相應(yīng)的CR來實現(xiàn)。
執(zhí)行如下命令創(chuàng)建一個YAML文件。
cube.yaml
為文件名,請根據(jù)實際情況替換。vim cube.yaml
在YAML文件輸入如下腳本,并根據(jù)實際情況設(shè)置其中的參數(shù)。
重要請確保
configName
字段值在安裝Logtail組件的Project中唯一。如果多個CR關(guān)聯(lián)同一個iLogtail采集配置,則刪除或修改任意一個CR均會影響到該iLogtail采集配置,導(dǎo)致其他關(guān)聯(lián)該iLogtail采集配置的CR狀態(tài)與日志服務(wù)中iLogtail采集配置的狀態(tài)不一致。
CR字段的格式請參見使用AliyunLogConfig管理采集配置。本文的iLogtail采集配置樣例包含基礎(chǔ)的文本日志采集功能,具體參數(shù)參見CreateConfig - 創(chuàng)建Logtail采集配置。
采集指定容器內(nèi)的單行文本日志
“創(chuàng)建名為
example-k8s-file
的iLogtail采集配置,以單行文本模式采集集群內(nèi)所有名稱開頭為app
的Pod的容器內(nèi)的/data/logs/app_1
路徑下的test.LOG
文件,直接發(fā)送到名稱為k8s-file
的Logstore,該Logstore屬于名稱為k8s-log-test
的Project?!?/p>apiVersion: log.alibabacloud.com/v1alpha1 kind: AliyunLogConfig metadata: # 設(shè)置資源名,在當(dāng)前Kubernetes集群內(nèi)唯一。 name: example-k8s-file namespace: kube-system spec: # 設(shè)置目標(biāo)project名稱(可不填寫,默認(rèn)為k8s-log-<your_cluster_id>) project: k8s-log-test # 設(shè)置Logstore名稱。如果您所指定的Logstore不存在,日志服務(wù)會自動創(chuàng)建。 logstore: k8s-file # 設(shè)置iLogtail采集配置。 logtailConfig: # 設(shè)置采集的數(shù)據(jù)源類型。采集文本日志時,需設(shè)置為file。 inputType: file # 設(shè)置iLogtail采集配置的名稱。 configName: example-k8s-file inputDetail: # 指定通過極簡模式采集文本日志。 logType: common_reg_log # 設(shè)置日志文件所在路徑。 logPath: /data/logs/app_1 # 設(shè)置日志文件的名稱。支持通配符星號(*)和半角問號(?),例如log_*.log。 filePattern: test.LOG # 采集容器的文本日志時,需設(shè)置dockerFile為true。 dockerFile: true #設(shè)置容器過濾條件。 advanced: k8s: K8sPodRegex: '^(app.*)$'
執(zhí)行如下命令使其iLogtail采集配置生效。iLogtail采集配置生效后,Logtail開始采集各個容器上的文本日志,并發(fā)送到日志服務(wù)中。
cube.yaml
為文件名,請根據(jù)實際情況替換。kubectl apply -f cube.yaml
重要采集到日志后,您需要先創(chuàng)建索引,才能在Logstore中查詢和分析日志。具體操作,請參見創(chuàng)建索引。
查看Logtail采集配置
控制臺
登錄日志服務(wù)控制臺。
在Project列表區(qū)域,單擊目標(biāo)Project。
在 頁簽中,單擊目標(biāo)日志庫前面的>,依次選擇 。
單擊目標(biāo)Logtail采集配置,查看Logtail采集配置詳情。
(推薦)CRD-AliyunPipelineConfig
查看由AliyunPipelineConfig創(chuàng)建的Logtail采集配置
執(zhí)行kubectl get clusteraliyunpipelineconfigs
命令查看iLogtail采集配置。
查看由AliyunPipelineConfig創(chuàng)建的Logtail采集配置的詳細(xì)信息
您可以執(zhí)行以下命令進(jìn)行查看。其中,<config_name>
為AliyunPipelineConfig
的名稱,請根據(jù)實際情況替換。
kubectl get clusteraliyunpipelineconfigs <config_name> -o yaml
以采集指定容器內(nèi)的單行文本日志的CR為例,返回結(jié)果參考如下所示,可以根據(jù)status查看iLogtail采集配置的應(yīng)用情況:
apiVersion: telemetry.alibabacloud.com/v1alpha1
kind: ClusterAliyunPipelineConfig
metadata:
finalizers:
- finalizer.pipeline.alibabacloud.com
name: example-k8s-file
# 預(yù)期的配置
spec:
config:
flushers:
- Endpoint: cn-hangzhou.log.aliyuncs.com
Logstore: k8s-file
Region: cn-hangzhou
TelemetryType: logs
Type: flusher_sls
inputs:
- EnableContainerDiscovery: true
FilePaths:
- /data/logs/app_1/**/test.LOG
Type: input_file
logstores:
- encryptConf: {}
name: k8s-file
project:
name: k8s-log-clusterid
# CR的應(yīng)用狀態(tài)
status:
# CR 是否應(yīng)用成功
success: true
# CR 當(dāng)前的狀態(tài)信息
message: success
# 當(dāng)前 status 的更新時間
lastUpdateTime: '2024-06-19T09:21:34.215702958Z'
# 上次成功應(yīng)用的配置信息,該配置信息為填充默認(rèn)值后實際生效的配置
lastAppliedConfig:
# 上次成功應(yīng)用的時間
appliedTime: '2024-06-19T09:21:34.215702958Z'
# 上次成功應(yīng)用的配置詳情
config:
configTags:
sls.crd.cluster: e2e-cluster-id
sls.crd.kind: ClusterAliyunPipelineConfig
sls.logtail.channel: CRD
flushers:
- Endpoint: cn-hangzhou.log.aliyuncs.com
Logstore: k8s-file
Region: cn-hangzhou
TelemetryType: logs
Type: flusher_sls
inputs:
- EnableContainerDiscovery: true
FilePaths:
- /data/logs/app_1/**/test.LOG
Type: input_file
name: example-k8s-file
logstores:
- appendMeta: true
autoSplit: true
encryptConf: {}
maxSplitShard: 64
name: k8s-file
shardCount: 2
ttl: 30
machineGroups:
- name: k8s-group-clusterid
project:
description: 'k8s log project, created by alibaba cloud log controller'
endpoint: cn-hangzhou.log.aliyuncs.com
name: k8s-log-clusterid
CRD-AliyunLogConfig
查看由AliyunLogConfig創(chuàng)建的iLogtail采集配置
您可以執(zhí)行kubectl get aliyunlogconfigs
命令進(jìn)行查看,返回結(jié)果如下圖所示。
查看由AliyunLogConfig創(chuàng)建的iLogtail采集配置的詳細(xì)信息
您可以執(zhí)行kubectl get aliyunlogconfigs <config_name> -o yaml
命令進(jìn)行查看。其中,<config_name>
為AliyunLogConfig
的名稱,請根據(jù)實際情況替換。 返回結(jié)果如下圖所示。
執(zhí)行結(jié)果中的status
字段和statusCode
字段表示iLogtail采集配置的狀態(tài)。
如果
statusCode
字段的值為200,表示應(yīng)用iLogtail采集配置成功。如果
statusCode
字段的值為非200,表示應(yīng)用iLogtail采集配置失敗。
查詢分析已采集的日志
在Project列表中,單擊目標(biāo)Project,進(jìn)入對應(yīng)的Project詳情頁面。
在對應(yīng)的日志庫右側(cè)的圖標(biāo),選擇查詢分析,查看Kubernetes集群輸出的日志。