1.静态配置(static config)示例

尽管Promtail可能是以Prometheus服务发现代码命名的,但该代码同样适用于在虚拟机或裸机上直接追踪没有容器或容器环境的日志,并且能够很好地发挥作用。

 1server:
 2  http_listen_port: 9080
 3  grpc_listen_port: 0
 4
 5positions:
 6  filename: /var/log/positions.yaml # Promtail需要有对此位置的写入权限。
 7
 8clients:
 9  - url: http://ip_or_hostname_where_Loki_run:3100/loki/api/v1/push
10
11scrape_configs:
12 - job_name: system
13   pipeline_stages:
14   static_configs:
15   - targets:
16      - localhost
17     labels:
18      job: varlogs  # `job`标签在Prometheus中非常常见,对于关联指标(metrics)和日志非常有用。
19      host: yourhost # `host`标签将有助于区分来自此机器和其他机器的日志
20      __path__: /var/log/*.log  # 路径匹配使用第三方库: https://github.com/bmatcuk/doublestar

如果你在轮转日志文件,请小心使用类似*.log的通配符模式,确保它不会匹配到已轮转的日志文件。例如,如果你每天将日志从server.log移动到同一个目录下的server.01-01-1970.log,那么使用通配符搜索模式*.log的静态配置将会捕捉到这个新文件并读取它,从而导致整天的日志重新被摄取。

上面__path__文件路径的匹配使用了第三方库https://github.com/bmatcuk/doublestar,关于具体的匹配模式可以查看doublestart的文档。

2.不包含目标(targets)的静态配置示例

 1server:
 2  http_listen_port: 9080
 3  grpc_listen_port: 0
 4
 5positions:
 6  filename: /var/log/positions.yaml # 此位置需要可被 Promtail 写入。
 7
 8clients:
 9  - url: http://ip_or_hostname_where_Loki_run:3100/loki/api/v1/push
10
11scrape_configs:
12 - job_name: system
13   pipeline_stages:
14   static_configs:
15   - labels:
16      job: varlogs  # 在 Prometheus 中,`job` 标签是相当标准的,对于关联指标(metrics)和日志非常有用。
17      host: yourhost # `host` 标签将有助于识别来自本机的日志与其他机器的日志。
18      __path__: /var/log/*.log  # 路径匹配使用了第三方库:https://github.com/bmatcuk/doublestar

3.Journal配置示例

这个例子从systemd日志中读取条目:

 1server:
 2  http_listen_port: 9080
 3  grpc_listen_port: 0
 4
 5positions:
 6  filename: /tmp/positions.yaml
 7
 8clients:
 9  - url: http://ip_or_hostname_where_loki_runs:3100/loki/api/v1/push
10
11scrape_configs:
12  - job_name: journal
13    journal:
14      max_age: 12h
15      labels:
16        job: systemd-journal
17    relabel_configs:
18      - source_labels: ['__journal__systemd_unit']
19        target_label: 'unit'

4.Journal配置示例

这个例子将Promtail启动为一个syslog接收器,并可以通过TCP接收Promtail中的syslog条目:

 1server:
 2  http_listen_port: 9080
 3  grpc_listen_port: 0
 4
 5positions:
 6  filename: /tmp/positions.yaml
 7
 8clients:
 9  - url: http://loki_addr:3100/loki/api/v1/push
10
11scrape_configs:
12  - job_name: syslog
13    syslog:
14      listen_address: 0.0.0.0:1514
15      labels:
16        job: "syslog"
17    relabel_configs:
18      - source_labels: ['__syslog_message_hostname']
19        target_label: 'host'

5.Push Config示例

这个例子将Promtail启动为一个Push接收器,并可以接收来自其他Promtail实例或Docker Logging Driver的日志:

 1server:
 2  http_listen_port: 9080
 3  grpc_listen_port: 0
 4
 5positions:
 6  filename: /tmp/positions.yaml
 7
 8clients:
 9  - url: http://ip_or_hostname_where_Loki_run:3100/loki/api/v1/push
10
11scrape_configs:
12- job_name: push1
13  loki_push_api:
14    server:
15      http_listen_port: 3500
16      grpc_listen_port: 3600
17    labels:
18      pushserver: push1

请注意,必须提供job_name,并且在多个loki_push_apiscrape_configs中必须是唯一的,它将用于注册指标。

创建一个新的服务器实例,所以http_listen_portgrpc_listen_port必须与Promtail服务器配置部分不同(除非禁用)。

如果不使用httpgrpc,您可以将grpc_listen_port设置为0,以便分配一个随机端口。

参考