![為什麼我的 Promtail 攝取管道中的標籤階段沒有效果?](https://rvso.com/image/760957/%E7%82%BA%E4%BB%80%E9%BA%BC%E6%88%91%E7%9A%84%20Promtail%20%E6%94%9D%E5%8F%96%E7%AE%A1%E9%81%93%E4%B8%AD%E7%9A%84%E6%A8%99%E7%B1%A4%E9%9A%8E%E6%AE%B5%E6%B2%92%E6%9C%89%E6%95%88%E6%9E%9C%EF%BC%9F.png)
這是我在各種主機上的 Promtail 抓取配置的一部分,用於將journald
日誌條目收集到 Loki 實例:
- job_name: journald
journal:
labels:
job: journald
relabel_configs:
- source_labels:
- __journal__systemd_unit
target_label: unit
pipeline_stages:
- match:
selector: '{unit=~"session-\\d+\\.scope"}'
stages:
- regex:
source: unit
expression: "^session-(?P<session_id>\\d+)\\.scope$"
- template:
source: message
template: "id={{ .session_id }} {{ .Entry }}"
- output:
source: message
- labels:
unit: session.scope
目的是使用公共標籤重新標記使用諸如 等標籤unit
捕獲的所有條目,並將從最初分配的標籤中提取的內容添加到條目文本中。雖然後一個方面(添加前綴)正在工作,因此意味著大多數配置正在工作,但定義的最後一個階段,將靜態文字分配給標籤卻不起作用。所有被正確選擇和更改的條目仍然具有其獨特的標籤等。session-1.scope
session-10.scope
session.scope
session_id
unit
session-1.scope
session-10.scope
誰能暗示我為了讓最後一點能如預期工作而缺少什麼?
答案1
在社群論壇的支持下,我找到了這個解決方案:
pipeline_stages:
- match:
selector: '{service=~"session-\\d+\\.scope"}'
stages:
- regex:
source: service
expression: "^session-(?P<session_id>\\d+)\\.scope$"
- template:
source: message
template: "{% raw %}id={{ .session_id }} {{ .Entry }}{% endraw %}"
- output:
source: message
- template:
source: label
template: session.scope
- labels:
service: label
它正在做 @jnauska 提到的事情。
答案2
您在標籤部分引用了一些實際值,但它session.scope
不存在,因此無法更改該值。
您可以使用範本為其產生一些值,例如:
- template:
source: session.scope
template: 'session.scope'
- labels:
unit: session.scope