promtail 配置问题收集
1、收集的json格式日志包含特殊字符
下面为一条日志例子
{"@timestamp":"2023-05-11 17:01:57","level":"trace","channel":"dev","message":"Running action: console\\controllers\\SmsQueueController::actionIndex()","context":[],"extra":{"request_id":"9d59848acb282439","module":"basic-console","category":"yii\\base\\InlineAction::runWithParams","prefix":"[-][-][-]"}}
✖错误做法:直接配置
- json: # 日志为json格式 选择需要的字段
expressions:
message:
level:
level_name:
extra:
context:
@timestamp:
✔正确做法
- json: # 日志为json格式 选择需要的字段
expressions:
datetime: '"@timestamp"' #使用”“把特殊字符包起来
message:
level:
level_name:
extra:
context:
2、收集的json格式日志中的嵌套json
没想到日志中的extra字段是json格式,需要提取extra中的module字段
下面为一条日志例子
{"@timestamp":"2023-05-11 17:01:57","level":"trace","channel":"dev","message":"Running action: console\\controllers\\SmsQueueController::actionIndex()","context":[],"extra":{"request_id":"9d59848acb282439","module":"basic-console","category":"yii\\base\\InlineAction::runWithParams","prefix":"[-][-][-]"}}
✔正确做法
- json: # 日志为json格式 选择需要的字段
expressions:
extra:
- json:
expressions:
module:
source: extra
3、promtail配置中调用环境变量
设置了环境变量HOSTNAME
env:
- name: HOSTNAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: spec.nodeName
需要将HOSTNAME变量变为loki的labels
✖错误做法:直接配置
##promtail.yaml
static_configs:
labels:
job: ai-service
host: "${HOSTNAME}"
✔正确做法
#1、promtail启动添加-config.expand-env=true
下面是kubectl启动的pod的yaml配置
args:
- '-config.file=/etc/promtail/promtail.yaml'
- '-client.url=http://loki:3100/loki/api/v1/push'
- '-config.expand-env=true'
#2、promtail.yaml添加labels
##promtail.yaml
static_configs:
labels:
job: ai-service
host: "${HOSTNAME}"