為了簡化日志管理流程,天翼云提供一套完整的日志服務解決方案,讓您免開發即可實現日志的快速獲取、存儲、檢索和分析。在 Serverless集群中,借助其內置的日志服務托管功能,您可以通過設置相應的環境變量,輕松地將業務容器的標準輸出和相關日志文件接入云日志服務。
前提條件
確保您已經創建Serverless集群,具體操作請參閱創建Serverless集群。
確保kubectl工具已經連接目標集群。
操作步驟
步驟一:創建應用并配置日志服務
為了給容器指定采集配置,需要使用env來為容器增加采集配置,并根據采集配置,創建對應的volumeMounts和volumes。Pod YAML示例如下:
apiVersion: v1
kind: Pod
metadata:
name: busybox-envs
spec:
containers:
- name: busybox
image: 'registry-huadong1.crs-internal.daliqc.cn/open-source/busybox:1.36'
args:
- -c
- mkdir -p /var/log;while true; do echo hello world; date; echo hello als >> /var/log/test.log; sleep 1;done
command:
- /bin/sh
env:
######### 配置環境變量 ###########
- name: Ctyun_logs_eci_log-stdout
value: stdout
- name: Ctyun_logs_eci_log-varlog
value: /var/log/*.log
- name: Ctyun_logs_eci_log-stdout_project
value: k8s-log-demo
- name: Ctyun_logs_eci_log-varlog_project
value: k8s-log-demo
- name: Ctyun_logs_eci_log-stdout_unit
value: log-stdout
- name: Ctyun_logs_eci_log-varlog_unit
value: log-varlog
######### 配置Volume Mount ###########
volumeMounts:
- name: volume-als-mydemo
mountPath: /var/log
volumes:
- name: volume-als-mydemo
emptyDir: {}
通過環境變量創建采集配置,所有與配置相關的環境變量都采用Ctyun_logs_eci_作為前綴,可按需在Pod YAML示例中添加配置環境變量和Volume Mount。
上面示例中創建了兩個采集配置,格式為Ctyun_logs_eci_{key},對應的{key}分別為log-stdout和log-varlog,每個采集配置都可以配置自己的日志項目和日志單元。
Ctyun_logs_eci_log-stdout:該env表示創建一個名稱為log-stdout的采集配置,采集容器標準輸出的日志。
Ctyun_logs_eci_log-stdout_project:該env表示創建一個名稱為k8s-log-demo的日志項目,容器的標準輸出將會采集到k8s-log-demo日志項目中。
Ctyun_logs_eci_log-stdout_unit:該env表示創建一個名稱為log-stdout的日志單元,容器的標準輸出將會采集到log-stdout日志單元中。
Ctyun_logs_eci_log-varlog:該env表示創建一個名稱為log-varlog的采集配置,日志采集路徑為/var/log/*.log。
Ctyun_logs_eci_log-varlog_unit:該env表示創建一個名稱為log-varlog的日志單元,容器的/var/log/*.log文件內容將會采集到log-varlog日志單元中。
Ctyun_logs_eci_log-varlog_project:該env表示創建一個名稱為k8s-log-demo的日志項目,容器的標準輸出將會采集到k8s-log-demo日志項目中。
如果您的采集配置中指定了非stdout的采集路徑,需要在此部分創建相應的volumeMounts。示例中采集配置添加了對/var/log/*.log的采集,因此相應地添加了/var/log的volumeMounts。
注意
刪除Pod不會刪除關聯的采集配置,需要您手動刪除,如果指定的采集配置已經存在,則不會對已有采集配置做任何操作。
步驟二:配置環境變量的高級參數
通過容器環境變量配置采集支持多種配置參數,您可以根據實際需求設置高級參數來實現日志采集的特殊需求。
| 字段 | 說明 | 示例 | 注意事項 |
|---|---|---|---|
| Ctyun_logs_eci_{key} | 必選項。{key}只能包含小寫字母、數字和短劃線(-)。{key}為采集配置的名稱,若不存在會創建。當值為stdout表示采集容器的標準輸出;其他值為容器內的日志路徑 |
value: stdout
value: /var/log/*.log | 默認切割模式為單行全文
|
| Ctyun_logs_eci_{key}_project | 可選。值為指定的日志服務Project。當不存在該環境變量時,默認為eci-als-default-log-project | name: Ctyun_logs_eci_demo_project value: my-k8s-project | |
| Ctyun_logs_eci_{key}_unit | 可選。值為指定的日志單元。當不存在該環境變量時日志單元默認為eci-als-default-log-unit | name: Ctyun_logs_eci_demo_unit value: my-logunit | |
| Ctyun_logs_eci_{key}_ttl | 可選。值為{key}指定的日志單元保存時間,有效值為1~365 當不存在該環境變量時,默認指定日志的保存時間為365天 | name: Ctyun_logs_eci_demo_ttl value: 365 | |
| Ctyun_logs_eci_{key}_hostgroup | 可選。值為主機組名稱。當不存在該環境變量時默認為eci-als-default-log-host-group | name: Ctyun_logs_eci_demo_hostgroup value: my-machine-group |
定制需求1:將多個應用數據采集到同一日志單元
如果您需要將多個應用數據采集到同一日志單元,可以設置 Ctyun_logs_eci_{key}_unit參數,例如以下配置將2個應用的stdout采集到stdout-logunit中。
示例中應用1的{key}為app1-stdout,應用2的{key}為app2-stdout。
應用1設置的環境變量為:
# 配置環境變量
- name: Ctyun_logs_eci_app1-stdout
value: stdout
- name: Ctyun_logs_eci_app1-stdout_unit
value: stdout-logunit
應用2設置的環境變量為:
# 配置環境變量
- name: Ctyun_logs_eci_app2-stdout
value: stdout
- name: Ctyun_logs_eci_app2-stdout_unit
value: stdout-logunit
定制需求2:將不同應用數據采集到不同的Project
如果您需要將不同應用的數據采集到多個Project中,您需要進行以下操作:
在每個Project中創建一個機器組,選擇自定義標識,機器組名稱可以自定義配置,但需保證標識名和機器組名稱一致。
在每個應用的環境變量中配置project、logunit、信息,其中機器組名稱為您在上一步創建的機器組名。
如下示例中應用1的{key}為app1-stdout,應用2的{key}為app2-stdout。
應用1設置的環境變量為:
# 配置環境變量
- name: Ctyun_logs_eci_app2-stdout
value: stdout
- name: Ctyun_logs_eci_app2-stdout_unit
value: stdout-logunit
應用2設置的環境變量為:
# 應用2 配置環境變量
- name: Ctyun_logs_eci_app2-stdout
value: stdout
- name: Ctyun_logs_eci_app2-stdout_project
value: app2-project
- name: Ctyun_logs_eci_app2-stdout_unit
value: app2-logunit
- name: Ctyun_logs_eci_app2-stdout_hostgroup
value: app1-hostgroup
步驟三:查看日志
登錄日志服務控制臺.
在左側導航欄中,選擇“日志管理”。
在日志項目列表區域,單擊對應的日志項目名稱。
在左側日志單元區域,單擊目標日志單元查看對應應用的日志信息。