这是关于下一个洛基的版本。有关最新的稳定版本,请转到最新版本.
配置
Promtail在YAML文件中配置(通常称为config.yaml
),其中包含Promtail服务器上的信息,位置存储在哪里,以及如何从文件中抓取日志。
在运行时打印Promtail配置
如果你通过了,请举起旗子-print-config-stderr
或-log-config-reverse-order
(或-print-config-stderr = true
Promtail将转储它从内置默认值中创建的整个配置对象,首先结合从配置文件的覆盖,然后通过覆盖从标志。
结果是Promtail配置结构体中每个配置对象的值。
有些值可能与您的安装无关,这是预期的,因为每个选项都有一个默认值,无论是否使用。
这个配置是Promtail将用来运行的,它对于调试与配置相关的问题是非常宝贵的,特别是在确保您的配置文件和标志被正确读取和加载时非常有用。
-print-config-stderr
当直接运行Promtail时是很好的。。/ promtail
因为您可以快速输出整个Promtail配置。
-log-config-reverse-order
是我们在所有环境中运行Promtail的标志,配置条目是反向的,以便在Grafana的Explore中查看时,配置的顺序从上到下正确读取。
配置文件参考
参数来指定要加载的配置文件-config.file
在命令行标记。文件被写入YAML格式,由下面的模式定义。括号表示参数是可选的。对于非列表参数,该值被设置为指定的默认值。
有关配置如何从目标发现和抓取日志的详细信息,请参见刮.有关从抓取的目标转换日志的详细信息,请参见管道.
在配置中使用环境变量
您可以在配置文件中使用环境变量引用来设置需要在部署期间进行配置的值。要这样做,请通过-config.expand-env = true
和使用:
$ {VAR}
其中VAR是环境变量的名称。
每个变量引用在启动时都被环境变量的值替换。替换是区分大小写的,并且发生在YAML文件被解析之前。除非指定默认值或自定义错误文本,否则对未定义变量的引用将被空字符串替换。
要指定一个默认值,请使用:
$ {VAR: default_value}
其中default_value是在环境变量未定义时使用的值。
请注意:expand-env = true
配置将首先运行envsubst将双斜杠替换为单斜杠。正因为如此,每一个斜杠的使用\
需要用双斜杠代替\ \
通用的占位符
布尔> <
:可以取值的布尔值真正的
或假
< int >
:匹配正则表达式的任意整数(1 - 9) + [0 - 9] *
<时间>
:匹配正则表达式的持续时间[0 - 9] +(女士| [smhdwy])
< labelname >
:匹配正则表达式的字符串[[a-zA-Z_] - za - z0 - 9 _] *
< labelvalue >
: Unicode字符串<文件名>
:相对于当前工作目录的有效路径或绝对路径。主机> <
:由主机名或IP后跟可选端口号组成的有效字符串<字符串>
:字符串<秘密>
:表示秘密的字符串,如密码
的支持内容和默认值config.yaml
:
配置服务器为Promtail。[server: ] #描述Promtail如何连接到Grafana Loki的多个实例#,并向每个实例发送日志。#警告:如果其中一个远程Loki服务器未能响应或响应#与任何错误,这将影响发送日志到任何#其他配置远程Loki服务器。发送是在单个线程上完成的!如果你想发送到多个远程Loki实例,通常建议并行运行多个Promtail客户端。clients: - [] #描述如何将读文件偏移保存到磁盘[positions: ] scrape_configs: - [] #为这个Promtail实例配置全局限制[limits_config: ] #配置如何监视尾部目标。[target_config: ] #配置额外的promtail配置。[options: ] #配置跟踪支持[tracing: ]
服务器
的服务器
block将Promtail的行为配置为HTTP服务器:
#关闭HTTP和GRPC服务器。[disable: | default = false] #启用/debug/fgprof和/debug/pprof端点进行分析。[profiling_enabled: | default = false] # HTTP服务器监听主机[http_listen_address: ] # HTTP服务器监听端口(0表示随机端口)[http_listen_port: | default = 80] # gRPC服务器监听主机[grpc_listen_address: ] # gRPC服务器监听端口(0表示随机端口)[grpc_listen_port: | default = 9095] #注册工具处理程序(/metrics等)[register_instrumentation: | default = true] # graceful shutdown Timeout [graceful_shutdown_timeout: | default = 30s] # HTTP服务器读超时[http_server_read_timeout: | default = 30s] # HTTP服务器写超时[http_server_write_timeout: | default = 30s] # HTTP服务器空闲超时[http_server_idle_timeout: | default = 120s] #可以接收的最大gRPC消息大小[grpc_server_max_recv_msg_size: | default = 4194304] #可以发送的最大gRPC消息大小[grpc_server_max_send_msg_size: | default = 4194304] # gRPC调用并发流数量限制(0 =无限)[grpc_server_max_concurrent_streams: | default = 100] #只记录给定级别或以上的消息。支持的值[debug, # info, warn, error] [log_level: | default = "info"] #服务器所有API路由的基本路径(例如,/v1/)[http_path_prefix: ] #目标管理器检查Promtail准备就绪的标志,如果设置为false,检查将被忽略[health_check_target: | default = true] #通过HTTP请求启用重新加载。[enable_runtime_reload: | default = false]
客户
的客户
block配置Promtail如何连接到Loki实例:
Loki监听的URL,在Loki中表示为http_listen_address和# http_listen_port。如果Loki运行在微服务模式下,这是分发服务器的HTTP # URL。需要包括推送API的路径。#示例:http://example.com:3100/loki/api/v1/push url: #与每个推送请求一起发送的自定义HTTP报头。注意Promtail本身设置的标题(例如X-Scope-OrgID)不能被覆盖。#示例:CF-Access-Client-Id: xxx [: …]#推送日志到Loki时默认使用的租户ID。如果省略或为空#,则假设Loki运行在单租户模式,并且没有发送X-Scope-OrgID报头#。[tenant_id: ] #发送批处理前的最大等待时间,即使# batch未满。[batchwait: | default = 1s] #在向Loki发送#批处理之前,可累积的最大批处理大小(以字节为单位) [batchsize: | default = 1048576] # If using basic auth, configures the username and password # sent. basic_auth: # The username to use for basic auth [username: ] # The password to use for basic auth [password: ] # The file containing the password for basic auth [password_file: ] # Optional OAuth 2.0 configuration # Cannot be used at the same time as basic_auth or authorization oauth2: # Client id and secret for oauth2 [client_id: ] [client_secret: ] # Read the client secret from a file # It is mutually exclusive with `client_secret` [client_secret_file: ] # Optional scopes for the token request scopes: [ - ... ] # The URL to fetch the token from token_url: # Optional parameters to append to the token URL endpoint_params: [ : ... ] # Bearer token to send to the server. [bearer_token: ] # File containing bearer token to send to the server. [bearer_token_file: ] # HTTP proxy server to use to connect to the server. [proxy_url: ] # If connecting to a TLS server, configures how the TLS # authentication handshake will operate. tls_config: # The CA file to use to verify the server [ca_file: ] # The cert file to send to the server for client auth [cert_file: ] # The key file to send to the server for client auth [key_file: ] # Validates that the server name in the server's certificate # is this value. [server_name: ] # If true, ignores the server certificate being signed by an # unknown CA. [insecure_skip_verify: | default = false] # Configures how to retry requests to Loki when a request # fails. # Default backoff schedule: # 0.5s, 1s, 2s, 4s, 8s, 16s, 32s, 64s, 128s, 256s(4.267m) # For a total time of 511.5s(8.5m) before logs are lost backoff_config: # Initial backoff time between retries [min_period: | default = 500ms] # Maximum backoff time between retries [max_period: | default = 5m] # Maximum number of retries to do [max_retries: | default = 10] # Disable retries of batches that Loki responds to with a 429 status code (TooManyRequests). This reduces # impacts on batches from other tenants, which could end up being delayed or dropped due to exponential backoff. [drop_rate_limited_batches: | default = false] # Static labels to add to all logs being sent to Loki. # Use map like {"foo": "bar"} to add a label foo with # value bar. # These can also be specified from command line: # -client.external-labels=k1=v1,k2=v2 # (or --client.external-labels depending on your OS) # labels supplied by the command line are applied # to all clients configured in the `clients` section. # NOTE: values defined in the config file will replace values # defined on the command line for a given client if the # label keys are the same. external_labels: [ : ... ] # Maximum time to wait for a server to respond to a request [timeout: | default = 10s]
职位
的职位
block配置Promtail将保存文件的位置,指示它已读取文件的距离。当Promtail重新启动时需要它,以允许它从停止的地方继续。
#位置文件[filename: | default = "/var/log/positions. "yaml"] #多久更新一次位置文件[sync_period: | default = 10s] #是否忽略和稍后覆盖位置文件损坏[ignore_invalid_yaml: | default = false]
scrape_configs
的scrape_configs
block配置Promtail如何使用指定的发现方法从一系列目标中抓取日志:
#在Promtail UI中标识此刮取配置的名称。job_name: #描述如何从目标器转换日志。[pipeline_stages: ] #描述如何从日志中抓取日志。[journal: ] #描述应从哪一种编码转换抓取文件。[encoding: ] #描述如何接收syslog日志。[syslog: ] #描述如何通过Loki推送API接收日志(例如从其他Promtails或Docker日志驱动)[loki_push_api: ] #描述如何从Windows事件日志中抓取日志。[windows_events: ] #提取/接收谷歌GCP日志的配置。[gcplog: ] #描述如何通过消费者组从Kafka获取日志。[kafka: ] #描述如何从elf客户端接收日志。[gelf: ] #从Cloudflare中提取日志的配置。 [cloudflare: ] # Configuration describing how to pull logs from a Heroku LogPlex drain. [heroku_drain: ] # Describes how to relabel targets to determine if they should # be processed. relabel_configs: - [] # Static targets to scrape. static_configs: - [] # Files containing targets to scrape. file_sd_configs: - [] # Describes how to discover Kubernetes services running on the # same host. kubernetes_sd_configs: - [] # Describes how to use the Consul Catalog API to discover services registered with the # consul cluster. consul_sd_configs: [ - ... ] # Describes how to use the Consul Agent API to discover services registered with the consul agent # running on the same host as Promtail. consulagent_sd_configs: [ - ... ] # Describes how to use the Docker daemon API to discover containers running on # the same host as Promtail. docker_sd_configs: [ - ... ]
pipeline_stages
管道阶段用于转换日志条目及其标签。管道在发现过程结束后执行。的pipeline_stages
对象由一个阶段列表组成,这些阶段对应于下面列出的项目。
在大多数情况下,从日志中提取数据正则表达式
或json
阶段。提取的数据被转换为一个临时映射对象。数据可以被Promtail使用,例如作为值标签
或者作为输出
.此外,任何其他阶段之外码头工人
而且中国国际广播电台
可以访问提取的数据。
- [ | | | | | | |
码头工人
Docker阶段解析来自Docker容器的日志内容,并通过name和一个空对象定义:
码头工人:{}
docker stage将匹配并解析如下格式的日志行:
' {"log":"level=info ts=2019-04-30 t02:12 . 441 . 844179z caller=filetargetmanager。: 180味精= \“添加目标\“\ n”、“流”:“stderr”、“时间”:“2019 - 04 - 30 t02:12:41.8443515z "}
自动提取时间
输入日志时间戳,流
变成一个标签,然后日志
字段到输出中,这可以是非常有用的,因为docker是包装您的应用程序日志以这种方式,这将展开它为进一步的管道处理只是日志内容。
Docker阶段只是这个定义的一个方便包装:
—json: expressions: output: log stream: stream timestamp: time—labels: stream:—timestamp: source: timestamp format: RFC3339Nano—output: source: output
中国国际广播电台
CRI阶段解析来自CRI容器的日志内容,由name定义为空对象:
中国国际广播电台:{}
CRI阶段将匹配并解析如下格式的日志行:
2019-01-01T01:00:00.000000001Z stderr P一些日志信息
自动提取时间
输入日志时间戳,流
这是非常有用的,因为CRI以这种方式包装您的应用程序日志,这将为进一步的管道处理日志内容展开它。
CRI阶段只是这个定义的一个方便包装:
- regex: expression: "^(?s)(?P
正则表达式
Regex阶段接受正则表达式,并提取捕获的命名组以供后续阶段使用。
regex: # RE2正则表达式。必须为每个捕获组命名。表达式: #要解析的提取数据的名称。如果为空,则使用日志消息。(来源:<字符串>)
json
JSON阶段将日志行解析为JSON并取JMESPath表达式从JSON中提取数据以供后续阶段使用。
JMESPath表达式的键/值对集合。键将是提取数据中的键,而表达式将是值,从源数据中作为JMESPath进行计算。表达式:[: …#要解析的提取数据的名称。如果为空,则使用日志消息。(来源:<字符串>)
模板
模板阶段使用Go文本/模板
语言来操作值。
#要解析的提取数据的名称。如果提取数据中的key不存在,将为它创建一个#条目。返回要使用的模板字符串。除了普通的模板#函数,ToLower, ToUpper, Replace, Trim, TrimLeft, TrimRight, # TrimPrefix, TrimSuffix和TrimSpace也可以作为函数使用。模板:<字符串>
例子:
模板:源:级别模板:'{{if eq .Value "WARN"}}{{替换。value "WARN" "OK" -1}}{{else}}{{.Value}}{{end}}'
匹配
当日志条目匹配可配置的时,匹配阶段有条件地执行一组阶段LogQL流选择器。
匹配:# LogQL流选择器。selector: #管道名称定义后,在pipeline_duration_seconds直方图中创建一个额外的标签,其中的值使用下划线与job_name连接。- [ | | | | | |
时间戳
时间戳阶段从提取的映射中解析数据,并覆盖Loki存储的日志的最终时间值。如果不存在此阶段,Promtail将把日志条目的时间戳与日志条目被读取的时间关联起来。
timestamp: #从提取的数据中用于时间戳的名称。决定如何解析时间字符串。可以按名称使用#预定义格式:[ANSIC UnixDate RubyDate RFC822 # RFC822Z RFC850 RFC1123 RFC1123Z RFC3339 RFC3339 nano Unix # UnixMs UnixUs UnixNs]。format: # IANA Timezone数据库字符串。(地点:<字符串>)
输出
输出阶段从提取的映射中获取数据,并设置Loki将存储的日志条目的内容。
output: #从提取的数据中用于日志条目的名称。来源:<字符串>
标签
标签阶段从提取的映射中获取数据,并在将发送给Loki的日志条目上设置额外的标签。
# Key是REQUIRED和将要创建的标签的名称。# Value是可选的,将是提取数据的名称,其值#将用于标签的值。如果为空,则该值将被推断为与键相同。[: []…]]
指标
度量阶段允许从提取的数据定义度量。
创建的指标不会推送给Loki,而是通过Promtail曝光/指标
端点。Prometheus应该配置为抓取Promtail,以便能够检索此阶段配置的指标。
#映射,其中键是度量的名称,值是特定的# metric类型。指标:[<字符串>:[<柜台> | <计> | <直方图>]…]
计数器
定义一个只增加值的计数器度量。
#度量类型。一定是柜台。type: Counter #描述指标。[描述:] #从提取的数据映射中用于度量的键,#如果不存在则默认为度量的名称。[source: ] config: #过滤源数据,仅在目标值与提供的字符串完全匹配时才更改度量#。#如果不存在,所有数据将匹配。[值:<字符串>]#必须为inc或add(不区分大小写)。如果选择# inc,则每接收到通过筛选器的# log行,度量值将增加1。如果选择add,则提取的值可以转换为正浮点数#,并且它的值将被添加到度量中。行动:<字符串>
计
定义一个量规度量,其值可以上升或下降。
#度量类型。必须是量规。类型:Gauge #描述度量。[描述:] #从提取的数据映射中用于度量的键,#如果不存在则默认为度量的名称。[source: ] config: #过滤源数据,仅在目标值与提供的字符串完全匹配时才更改度量#。#如果不存在,所有数据将匹配。[值:<字符串>]#必须为set, inc, dec, add或sub如果选择了# add、set或sub,则提取的值必须#可转换为正浮点数。Inc和dec将分别增加#或减少度量值1。行动:<字符串>
柱状图
定义一个直方图度量,其值是桶形的。
#度量类型。一定是直方图。类型:直方图#描述指标。[描述:] #从提取的数据映射中用于度量的键,#如果不存在则默认为度量的名称。[source: ] config: #过滤源数据,仅在目标值与提供的字符串完全匹配时才更改度量#。#如果不存在,所有数据将匹配。[值:<字符串>]#必须为inc或add(不区分大小写)。如果选择# inc,则每接收到通过筛选器的# log行,度量值将增加1。如果选择add,则提取的值可以转换为正浮点数#,并且它的值将被添加到度量中。action: #保存度量桶中所有的数字。 buckets: -
租户
租户阶段是一个操作阶段,它为从提取的数据映射中的字段中选取的日志条目设置租户ID。
tenant: #从提取的数据中指定租户ID的名称。需要源配置选项或值配置选项之一,但不需要两者都需要(两者互斥)。[source: ] #执行此阶段时设置租户ID的值。当此阶段包含在带有"match"的条件管道中时,非常有用。[值:]
取代
替换阶段是一个解析阶段,它使用正则表达式解析日志行并替换日志行。
replace: # RE2正则表达式。每个命名的捕获组将被添加到提取中。#每个捕获组和命名捕获组将被替换为# ' replace '表达式中给出的值: #从提取的数据中解析的名称如果为空,则使用日志消息。#被替换的值将被分配回源键[source: ] #被捕获的组将被替换到的值捕获的组或命名的#捕获组将被替换为这个值,日志行将被替换为#新的替换值。空值将从日志行中删除捕获的组。(替换:<字符串>)
杂志
的杂志
block配置从Promtail中读取systemd日志。需要构建具有日志支持的Promtail启用.如果使用AMD64 Docker镜像,默认启用。
#当为true时,来自日志的日志消息将作为带有所有日志条目原始#字段的JSON消息通过#管道传递。当为false时,日志消息是来自日志条目的message #字段的文本内容。[json: | default = false] #从进程开始读取并发送给Loki的最古老的相对时间。[max_age: | default = 7h] #添加到日志标签的标签映射:[: …]要从中读取条目的目录的路径。默认为system# paths (/var/log/journal和/run/log/journal)为空。(路径:<字符串>)
请注意:优先级标签有value和keyword两种形式。例如,如果优先级
是3.
然后标签就会__journal_priority
有一个值3.
而且__journal_priority_keyword
使用相应的关键字犯错
.
syslog
的syslog
block配置一个syslog监听器,允许用户通过syslog协议向Promtail推送日志。目前支持的是IETF Syslog (RFC5424)有和没有八隅体计数。
建议使用专用的syslog转发器,例如syslog-ng或rsyslog在Promtail前面。转发器可以处理现有的各种规范和传输(UDP、BSD syslog等)。
八位字节数建议作为消息框的方式。在小溪里不透明的框架, Promtail需要等待下一条消息来捕获多行消息,因此消息之间可能会发生延迟。
参见的推荐输出配置syslog-ng而且rsyslog.这两种配置都启用了带有八位元计数的IETF Syslog。
如果连接了许多客户端,则可能需要增加Promtail进程的打开文件限制。(ulimit - sn
)
#监听的TCP地址。格式为“host:port”。listen_address: #配置接收端使用TLS。tls_config: #服务器发送的证书和密钥文件(必选)cert_file: key_file: # CA证书用于验证客户端证书。指定时启用客户端证书验证。[ca_file: ] # tcp syslog连接的空闲超时时间,默认为120秒idle_timeout: #是否syslog结构化数据转换为标签。[example@99999 test="yes"]的结构化数据条目将变成标签"__syslog_message_sd_example_99999_test",值为"yes"。label_structured_data: #要添加到每条日志消息的标签映射。标签:[: …] ] # Whether Promtail should pass on the timestamp from the incoming syslog message. # When false, or if no timestamp is present on the syslog message, Promtail will assign the current timestamp to the log when it was processed. # Default is false use_incoming_timestamp: # Sets the maximum limit to the length of syslog messages max_message_length:
可用的标签
__syslog_connection_ip_address
:对端IP地址。__syslog_connection_hostname
:远程主机名。__syslog_message_severity
:syslog严重性从消息解析。符号名称如下syslog_message.go.__syslog_message_facility
:syslog工具从消息解析。符号名称如下syslog_message.go而且syslog (3)
.__syslog_message_hostname
:主机名从消息解析。__syslog_message_app_name
:应用名称字段从消息解析。__syslog_message_proc_id
:procid领域从消息解析。__syslog_message_msg_id
:是否字段从消息解析。__syslog_message_sd_ < sd_id > [_ < iana_enterprise_id >] _ < sd_name >
:结构化数据字段从消息解析。数据字段(custom@99770示例=“1”)
就变成了__syslog_message_sd_custom_99770_example
.
loki_push_api
的loki_push_api
block配置Promtail暴露一个Loki push API服务器。
每个作业都配置了一个loki_push_api
将公开这个API,并需要一个单独的端口。
注意服务器
配置与服务器.
Promtail还在上公开第二个端点/ promtail / api / v1 /原料
它期望用换行符分隔的日志行。这可以用来发送NDJSON或明文日志。
#推送服务器配置选项[server: ] #标签映射添加到发送到推送API标签的每个日志行:[: …Promtail是否应该传递来自传入日志的时间戳。当日志被处理时,Promtail将当前时间戳分配给日志。#不适用于' /promtail/api/v1/raw '上的明文端点。[use_incoming_timestamp: | default = false]
看到使用实例推送配置
windows_events
的windows_events
block配置Promtail刮windows事件日志并将它们发送给Loki。
要订阅特定的事件流,您需要提供eventlog_name
或者一个xpath_query
.
默认情况下,每3秒定期抓取事件,但可以使用poll_interval
.
书签路径bookmark_path
是强制性的,将用作一个位置文件,Promtail将在其中保存最近处理的事件的记录。这个文件在Promtail重新启动时仍然存在。
你可以设置use_incoming_timestamp
如果您想保留传入事件时间戳。缺省情况下,Promtail将使用从事件日志中读取事件时的时间戳。
Promtail将序列化JSON windows事件,添加通道
而且电脑
接收到的事件的标签。属性可以添加其他标签标签
财产。
# LCID (Locale ID)用于事件呈现# - 1033,强制English language # - 0使用默认的Windows语言环境[Locale: | default = 0] #事件日志的名称,仅在xpath_query为空时使用#示例:"Application" [eventlog_name: | default = ""] # xpath_query可以定义为" event /System[EventID=999]" #,也可以形成XML查询。请参阅使用事件文章:# https://docs.microsoft.com/en-us/windows/win32/wes/consuming-events # XML查询是推荐的形式,因为它最灵活#您可以通过在Windows事件查看器中创建自定义视图来创建或调试XML查询#,然后将生成的XML复制到这里[xpath_query: | default = "*"] #设置文件系统上的书签位置。书签包含了目标当前的XML位置。#当重新启动或展开Promtail时,目标将继续根据书签位置在它离开的地方抓取事件。#在每个条目处理后更新位置。[bookmark_path: | default = ""] # PollInterval是我们查看是否有新事件可用的时间间隔。默认情况下,目标每3秒检查一次。[poll_interval: | default = 3s] #允许排除xml事件数据[exclude_event_data: | default = false] #允许排除人性化事件消息[exclude_event_message: | default = false] #允许排除每个windows事件的用户数据 [exclude_user_data: | default = false] # Label map to add to every log line read from the windows event log labels: [ : ... ] # If Promtail should pass on the timestamp from the incoming log or not. # When false Promtail will assign the current timestamp to the log when it was processed [use_incoming_timestamp: | default = false]
GCP的日志
的gcplog
block配置Promtail如何接收GCP日志。有两种策略,基于的配置subscription_type
:
- 拉:使用GCP发布/订阅把订阅.Promtail将直接使用来自已配置的GCP发布/订阅主题的日志消息。
- 推:使用GCP发布/订阅推动订阅.Promtail将公开一个HTTP服务器,GCP将向该服务器发送日志。
当使用推
订阅类型,请记住:
- 的
服务器
配置与服务器,因为Promtail为需要这样做的目标公开了一个HTTP服务器。 - 端点为
POST /质量/ api / v1 /推动
,它期望来自GCP PubSub消息传递系统的请求。
#从GCP获取日志的订阅类型。可以是' pull '(默认)或' push '。[subscription_type: | default = "pull"] #如果subscription_type是pull, GCP项目ID [project_id: ] #如果subscription_type是pull, GCP PubSub订阅,Promtail将从那里提取日志[subscription: ] #如果subscription_type是push,服务器配置选项[server: ] # Promtail是否应该传递来自传入的GCP日志消息的时间戳。#当为false时,或者如果GCP日志消息中没有时间戳,Promtail将在处理日志时将当前的#时间戳分配给日志。[use_incoming_timestamp: | default = false] #如果subscription_type是push,配置HTTP处理超时。如果处理传入的GCP日志请求所花费的时间比配置的持续时间长#,即处理然后将条目发送到处理管道,服务器将中止#并响应一个503 HTTP状态码。[push_timeout: | default = 0 (no timeout)] #添加到每条日志消息的标签映射。标签:[: …]]
可用的标签
当Promtail接收到GCP日志时,各种内部标签可用重新确认.这取决于所选择的订阅类型。
内部标签可拉
__gcp_logname
__gcp_resource_type
__gcp_resource_labels_ <名称>
内部标签可用于推送
__gcp_message_id
__gcp_subscription_name
__gcp_attributes_ <名称>
:读取的所有属性.message.attributes
在传入的推送消息中。每个属性键都可以方便地重命名,因为它可能包含不受支持的字符。例如,logging.googleapis.com/timestamp
转换为__gcp_attributes_logging_googleapis_com_timestamp
.__gcp_logname
__gcp_resource_type
__gcp_resource_labels_ <名称>
卡夫卡
的卡夫卡
block配置Promtail从卡夫卡使用组消费者。
的经纪人
应该列出可用的代理来与Kafka集群通信。当您希望提高可用性时,可以使用多个代理。
的主题
是Promtail将订阅的主题列表。如果一个话题以^
然后是正则表达式(RE2公司)用于匹配主题。例如^ promtail -。*
将与主题相匹配promtail-dev
而且promtail-prod
.主题每30秒刷新一次,所以如果一个新的主题匹配,它将自动添加,而不需要Promtail重新启动。
的group_id
定义用于消费日志的唯一消费者组id。发布到主题的每个日志记录都被传递到每个订阅消费者组中的一个消费者实例。
- 如果所有promtail实例都具有相同的消费者组,那么记录将在promtail实例上有效地实现负载平衡。
- 如果所有的promtail实例都有不同的消费者组,那么每条记录都将广播给所有的promtail实例。
的group_id
如果您想有效地将数据发送到多个Loki实例和/或其他接收器,则非常有用。
的转让人
配置允许您选择要用于消费者组的再平衡策略。重新平衡是这样一个过程:一组消费者实例(属于同一个组)协调拥有该组订阅的一组互斥的主题分区。
范围
默认情况下,将分区作为范围分配给用户组成员。黏糊糊的
将分区分配给成员,并尝试保留先前的分配设置轮流捡取
以交替的顺序为成员分配分区。
的版本
允许选择连接到集群所需的kafka版本。(默认为2.2.1
)
默认情况下,当消息被读取时,时间戳由Promtail分配,如果你想保留来自Kafka的实际消息时间戳,你可以设置use_incoming_timestamp
为true。
#连接到kafka的代理列表(必选)[brokers: | default = [""]] # Kafka主题列表(必选)[主题: | default = [""]]] # Kafka消费组id。[group_id: | default = "promtail"] #使用的消费者组再平衡策略(例如' sticky ', ' roundrobin '或' range ') [assignor: | default = "range"] #连接到的Kafka版本。[version: | default = "2.2.1"] # Kafka broker可选认证配置authentication: # Type is认证类型支持值[none, ssl, sasl] [type: | default = "none"] # TLS认证加密配置。仅当认证类型为ssl时使用。tls_config: [] # SASL配置进行认证。仅当认证类型为sasl时使用。 sasl_config: # SASL mechanism. Supported values [PLAIN, SCRAM-SHA-256, SCRAM-SHA-512] [mechanism: | default = "PLAIN"] # The user name to use for SASL authentication [user: ] # The password to use for SASL authentication [password: ] # If true, SASL authentication is executed over TLS [use_tls: | default = false] # The CA file to use to verify the server [ca_file: ] # Validates that the server name in the server's certificate # is this value. [server_name: ] # If true, ignores the server certificate being signed by an # unknown CA. [insecure_skip_verify: | default = false] # Label map to add to every log line read from kafka labels: [ : ... ] # If Promtail should pass on the timestamp from the incoming log or not. # When false Promtail will assign the current timestamp to the log when it was processed [use_incoming_timestamp: | default = false]
可用的标签:
下面的标签列表是在使用kafka时发现的:
__meta_kafka_topic
:已读取消息的当前主题。__meta_kafka_partition
:读消息所在的分区号。__meta_kafka_member_id
:消费组成员id。__meta_kafka_group_id
:消费组id。__meta_kafka_message_key
:消息键。如果为空,则该值为“none”。
要将发现的标签保存到日志中,请使用relabel_configs部分。
GELF
的gelf
block配置一个gef UDP监听器,允许用户将日志推送到PromtailGELF协议。目前只支持UDP,如果您对TCP支持感兴趣,请提交功能请求。
可以发送未压缩的gef消息,也可以使用GZIP或ZLIB进行压缩。
接收到的每个gef消息将被编码为JSON作为日志行。例如:
{"version":"1.1","host":"example.org","short_message":"短消息","timestamp":1231231123,"level":5,"_some_extra":"extra"}
你可以利用管道阶段使用gef目标,例如,如果您想解析日志行并提取更多标签或更改日志行格式。
#监听的UDP地址。格式为“host:port”。默认为0.0.0.0:12201 listen_address: #标签映射添加到每条日志消息。标签:[: …]Promtail是否应该传递来自传入的elf消息的时间戳。#当为false时,或者如果在elf消息中没有时间戳,Promtail将在日志处理时将当前时间戳分配给日志。#默认为false use_incoming_timestamp:
可用的标签:
__gelf_message_level
: gef级别为字符串。__gelf_message_host
:发送gef消息的主机。__gelf_message_version
:客户端设置的gef级消息版本。__gelf_message_facility
: gef设施。
要将发现的标签保存到日志中,请使用relabel_configs部分。
Cloudflare
的cloudflare
block配置Promtail从Cloudflare中提取日志Logpull API.
这些日志包含与连接客户端相关的数据、通过Cloudflare网络的请求路径以及来自原始web服务器的响应。这些数据对于充实原始服务器上的现有日志非常有用。
#使用Cloudflare API令牌。(必选)#您可以通过访问您的[Cloudflare配置文件](https://dash.cloudflare.com/profile/api-tokens)创建一个新的令牌。api_token: #抽取日志的Cloudflare区域id。(必选)zone_id: #提取日志的时间范围。[pull_range: | default = 1m] #提取日志的工人数量。[workers: | default = 3] #获取日志的字段类型列表#支持的值:默认值,最小值,扩展值,全部。[fields_type: | default = default] #添加到每条日志信息的标签映射。标签:[: …]]
缺省情况下,Promtail使用默认字段集获取日志。以下是可用的不同类型的字段以及它们包括的字段:
默认的
包括"ClientIP", "ClientRequestHost", "ClientRequestMethod", "ClientRequestURI", "EdgeEndTimestamp", "EdgeResponseBytes", "EdgeRequestHost", "EdgeResponseStatus", "EdgeStartTimestamp", "RayID"
最小的
包括所有默认的
字段和添加“ZoneID”,“ClientSSLProtocol”,“ClientRequestProtocol”,“ClientRequestPath”,“ClientRequestUserAgent”,“ClientRequestReferer”,“EdgeColoCode”,“ClientCountry”,“CacheCacheStatus”,“CacheResponseStatus”,“EdgeResponseContentType”
扩展
包括所有最小的
字段和添加"ClientSSLCipher", "ClientASN", "ClientIPClass", "CacheResponseBytes", "EdgePathingOp", "EdgePathingSrc", "EdgePathingStatus", "ParentRayID", "WorkerCPUTime", "WorkerStatus", "WorkerSubrequest", "WorkerSubrequestCount", "OriginIP", "OriginResponseStatus", "OriginSSLProtocol", "OriginResponseHTTPExpires", "OriginResponseHTTPLastModified"
所有
包括所有扩展
字段和添加"BotScore", "BotScoreSrc", "ClientRequestBytes", "ClientSrcPort", "ClientXRequestedWith", "CacheTieredFill", "EdgeResponseCompressionRatio", "EdgeServerIP", "FirewallMatchesSources", "FirewallMatchesActions", "FirewallMatchesRuleIDs", "OriginResponseBytes", "OriginResponseTime", "ClientDeviceType", " wafflages ", "WAFMatchedVar", "EdgeColoID", "RequestHeaders", "ResponseHeaders"
要详细了解每个字段及其值,请参阅Cloudflare文档.
Promtail将最后成功获取的时间戳保存在位置文件中。如果在文件中找到给定区域ID的位置,Promtail将重新从该位置提取日志。当没有找到位置时,Promtail将从当前时间开始拉取日志。
Promtail使用多个worker获取日志(可通过工人
),请求最后可用的拉程(通过pull_range
重复)。方法验证Promtail获取的最后一个时间戳cloudflare_target_last_requested_end_timestamp
指标。Promtail有可能因为每次拉有太多的日志线而落后。添加更多的工人、减小拉取范围或减少获取的字段数量可以缓解这种性能问题。
所有Cloudflare日志都是JSON格式。这里有一个例子:
{"CacheCacheStatus": "miss", "CacheResponseBytes": 8377, "CacheResponseStatus": 200, "CacheTieredFill": false, "ClientASN": 786, "ClientCountry": "gb", "ClientDeviceType": "desktop", "ClientIP": "100.100.5.5", "ClientIPClass": "noRecord", "ClientRequestBytes": 2691, "ClientRequestHost": "www.foo.com", "ClientRequestMethod": "GET", "ClientRequestPath": "/comments/foo/", "ClientRequestProtocol": "HTTP/1.0", "ClientRequestReferer":"https://www.foo.com/foo/168855/?offset=8625", "ClientRequestURI": "/foo/15248108/", "ClientRequestUserAgent": "some bot", "ClientSSLCipher": " ecdhe - ecdsa - aes128 - gcc - sha256 ", "ClientSSLProtocol": "TLSv1.2", "ClientSrcPort": 39816, "ClientXRequestedWith": "", "EdgeColoCode": "MAN", "EdgeColoID": 341, "EdgeEndTimestamp": 1637336610671000000, "EdgePathingOp": "wl", "EdgePathingSrc": "macro", "EdgePathingStatus": "nr", "EdgeRateLimitAction": "" EdgeRateLimitID": 0, "EdgeRequestHost":"www.foo.com", "EdgeResponseBytes": 14878, "EdgeResponseCompressionRatio": 1, "EdgeResponseContentType": "text/html", "EdgeResponseStatus": 200, " edgererverip ": "8.8.8.8", "EdgeStartTimestamp": 1637336610517000000, "FirewallMatchesActions": [], "FirewallMatchesRuleIDs": [], "FirewallMatchesSources": [], "OriginIP": "8.8.8.8", "OriginResponseBytes": 0, "OriginResponseHTTPExpires": "", "OriginResponseHTTPLastModified": ", "OriginResponseStatus": 200, "OriginResponseTime":123000000, "OriginSSLProtocol": "TLSv1.2", "ParentRayID": "00", "RayID": "6b0a…","RequestHeaders": [], "ResponseHeaders": ["x-foo": "bar"], "SecurityLevel": "med", "WAFAction": "unknown", " waff": "0", "WAFMatchedVar": "" WAFProfile": "unknown", "WAFRuleID": "" WAFRuleID": "" WAFRuleMessage": "" WorkerCPUTime": 0", "WorkerSubrequest": false ", "WorkerSubrequestCount": 0", "ZoneID": 1234}
你可以利用管道阶段例如,如果您想解析JSON日志行并提取更多标签或更改日志行格式。
heroku_drain
的heroku_drain
block配置Promtail暴露一个Heroku HTTPS Drain.
每个配置了Heroku Drain的作业都将公开一个Drain,并且需要一个单独的端口。
的服务器
配置与服务器,因为Promtail为每个新排泄暴露了一个HTTP服务器。
Promtail公开的端点为heroku / api / v1 /排水
,它期待Heroku的日志发送请求。
# Heroku排泄服务器配置选项[server: ] #添加到每条日志消息的标签映射。标签:[: …]Promtail是否应该传递来自传入Heroku drain消息的时间戳。#当为false时,或者如果syslog消息中没有时间戳,Promtail将在处理日志时将当前的#时间戳分配给日志。[use_incoming_timestamp: | default = false]
可用的标签
原木排水管把原木送进去Syslog-formatted消息(有一些轻微的调整;它们不兼容rfc)。
Heroku Drain目标用以下标签为每个日志条目公开接收到的syslog字段:
__heroku_drain_host
:主机名从消息解析的字段。__heroku_drain_app
:应用名称从消息解析的字段。__heroku_drain_proc
:PROCID从消息解析的字段。__heroku_drain_log_id
:是否从消息解析的字段。
此外,Heroku排泄目标将从配置的排泄目标url读取所有url查询参数,并使它们可用为__heroku_drain_param_ <名称>
标签,相同参数的多个实例将显示为逗号分隔的字符串
relabel_configs
重标记是一种强大的工具,可以在删除目标之前动态重写目标的标签集。每个刮取配置可以配置多个重标签步骤。它们按照在配置文件中出现的顺序应用于每个目标的标签集。
重新贴标签后,实例
的值__address__
如果在重标签期间没有设置,则默认为。的__scheme__
而且__metrics_path__
标签分别设置为目标的方案和度量路径。的__param_ <名称>
label被设置为第一个被调用的URL参数的值<名称>
.
附加标签前缀为__meta_
可能在重新贴标签阶段可用。它们由提供目标的服务发现机制设置,并且在不同机制之间有所不同。
以__
将在目标重标完成后从标签集中移除。
如果重新标记步骤只需要临时存储标签值(作为后续重新标记步骤的输入),则使用__tmp
标签名称前缀。普罗米修斯保证自己永远不会使用这个前缀。
#源标签从现有标签中选择值。它们的内容使用配置的分隔符连接起来,并与用于替换、保留和删除操作的配置正则表达式匹配。[source_labels: '[' [,…]]']' ] # Separator placed between concatenated source label values. [ separator: | default = ; ] # Label to which the resulting value is written in a replace action. # It is mandatory for replace actions. Regex capture groups are available. [ target_label: ] # Regular expression against which the extracted value is matched. [ regex: | default = (.*) ] # Modulus to take of the hash of the source label values. [ modulus: ] # Replacement value against which a regex replace is performed if the # regular expression matches. Regex capture groups are available. [ replacement: | default = $1 ] # Action to perform based on regex matching. [ action: | default = replace ]
<正则表达式>
是否有效RE2正则表达式.这是必需的取代
,保持
,下降
,labelmap
,labeldrop
而且labelkeep
行动。正则表达式在两端被锚定。要取消正则表达式的锚定,请使用* * < regex >
.
< relabel_action >
确定要采取的重贴标签操作:
取代
:匹配正则表达式
反对连接source_labels
.然后,设置target_label
来更换
,并使用匹配组引用($ {1}
,$ {2}
,…)在更换
用它们的值代替。如果正则表达式
不匹配,没有替换发生。保持
:删除对应的目标正则表达式
不匹配连接source_labels
.下降
:删除对应的目标正则表达式
匹配连接项source_labels
.hashmod
:设置target_label
到模量
的哈希值source_labels
.labelmap
:匹配正则表达式
针对所有标签名称。然后将匹配标签的值复制到更换
使用匹配组引用($ {1}
,$ {2}
,…)在更换
用它们的值代替。labeldrop
:匹配正则表达式
针对所有标签名称。任何匹配的标签都将从标签集中删除。labelkeep
:匹配正则表达式
针对所有标签名称。任何不匹配的标签都将从标签集中删除。
一定要小心labeldrop
而且labelkeep
确保删除日志标签后,日志标签仍然是唯一的。
static_configs
一个static_configs
允许指定目标列表和它们的公共标签集。这是在刮取配置中指定静态目标的规范方法。
#配置发现到当前机器上。#这是prometheus服务发现代码所要求的,但并不真正适用于Promtail,因为Promtail只能查看本地机器上的文件#因此它应该只有localhost的值,或者它可以完全排除#,localhost的默认值将被Promtail应用。目标:- localhost#定义一个要抓取的文件和一组可选的附加标签,应用于由__path__文件定义的#所有流。labels: #加载日志的路径。可以使用glob模式(例如,/var/log/*.log)。__path__: #用于排除文件被加载。也可以使用glob模式。__path_exclude__: #分配给日志的附加标签[: …]]
file_sd_config
基于文件的服务发现提供了一种更通用的方式来配置静态目标,并用作插入自定义服务发现机制的接口。
它读取一组包含零个或多个列表的文件< static_config >
s.对所有已定义文件的更改将通过磁盘监视检测到并立即应用。文件可以以YAML或JSON格式提供。只应用导致格式良好的目标组的更改。
JSON文件必须包含一个静态配置列表,使用以下格式:
[{“目标”:“localhost”,“标签”:{“__path__”:“<字符串>”,…"": "",…}},…]
作为备用方案,还会按照指定的刷新间隔定期重新读取文件内容。
每个目标都有一个元标签__meta_filepath
在重新确认阶段.它的值被设置为从中提取目标的文件路径。
#提取目标组的文件的模式。文件:[- …#重新读取文件的刷新间隔。[refresh_interval: | default = 5m]
在哪里< filename_pattern >
可能是一条路径的终点. json
,.yml
或.yaml
.最后一个路径段可以包含单个路径*
匹配任何字符序列,例如:我/道路/ tg_ * . json
.
kubernetes_sd_config
Kubernetes SD配置允许从Kubernetes”REST API,并且始终与集群状态保持同步。
下列之一角色
类型可以配置来发现目标:
节点
的节点
角色在每个集群节点上发现一个目标,其地址默认为Kubelet的HTTP端口。
目标地址默认为Kubernetes节点对象的第一个现有地址,地址类型顺序为NodeInternalIP
,NodeExternalIP
,NodeLegacyHostIP
,NodeHostName
.
可用的元标签:
__meta_kubernetes_node_name
:节点对象名称。__meta_kubernetes_node_label_ < labelname >
:来自节点对象的每个标签。__meta_kubernetes_node_labelpresent_ < labelname >
:真正的
对于来自节点对象的每个标签。__meta_kubernetes_node_annotation_ < annotationname >
:来自节点对象的每个注释。__meta_kubernetes_node_annotationpresent_ < annotationname >
:真正的
对于来自节点对象的每个注释。__meta_kubernetes_node_address_ < address_type >
:每个节点地址类型的第一个地址(如果存在)。
此外,实例
该节点的标签将被设置为从API服务器检索到的节点名称。
服务
的服务
角色为每个服务的每个服务端口发现一个目标器。这对于服务的黑箱监视通常很有用。该地址将设置为服务的Kubernetes DNS名称和相应的服务端口。
可用的元标签:
__meta_kubernetes_namespace
:服务对象的命名空间。__meta_kubernetes_service_annotation_ < annotationname >
:来自服务对象的每个注释。__meta_kubernetes_service_annotationpresent_ < annotationname >
对于服务对象的每个注释:true。__meta_kubernetes_service_cluster_ip
:服务的集群IP地址。(不适用于ExternalName类型的服务)__meta_kubernetes_service_external_name
:服务的DNS名称。(适用于ExternalName类型的服务)__meta_kubernetes_service_label_ < labelname >
:来自服务对象的每个标签。__meta_kubernetes_service_labelpresent_ < labelname >
:真正的
对于服务对象的每个标签。__meta_kubernetes_service_name
:服务对象的名称。__meta_kubernetes_service_port_name
:目标器业务端口名称。__meta_kubernetes_service_port_protocol
:目标器业务端口的协议。
圆荚体
的圆荚体
角色发现所有pod并将它们的容器公开为目标。对于容器的每个声明端口,将生成单个目标。如果容器没有指定端口,则为每个容器创建一个无端口目标器,通过重新贴标签的方式手动添加端口。
可用的元标签:
__meta_kubernetes_namespace
: pod对象的命名空间。__meta_kubernetes_pod_name
: pod对象的名称。__meta_kubernetes_pod_ip
: pod对象的pod IP。__meta_kubernetes_pod_label_ < labelname >
: pod对象中的每个标签。__meta_kubernetes_pod_labelpresent_ < labelname >
:真正的
对于pod对象中的每个标签。__meta_kubernetes_pod_annotation_ < annotationname >
:来自pod对象的每个注释。__meta_kubernetes_pod_annotationpresent_ < annotationname >
:真正的
对于来自pod对象的每个注释。__meta_kubernetes_pod_container_init
:真正的
如果容器是InitContainer__meta_kubernetes_pod_container_name
:目标地址所指向的容器名称。__meta_kubernetes_pod_container_port_name
:集装箱端口名称。__meta_kubernetes_pod_container_port_number
:集装箱端口号。__meta_kubernetes_pod_container_port_protocol
:集装箱端口协议。__meta_kubernetes_pod_ready
:设置为真正的
或假
豆荚的准备状态。__meta_kubernetes_pod_phase
:设置为等待
,运行
,成功
,失败的
或未知的
在生命周期.__meta_kubernetes_pod_node_name
: pod被调度到的节点的名称。__meta_kubernetes_pod_host_ip
: pod对象的当前主机IP。__meta_kubernetes_pod_uid
: pod对象的UID。__meta_kubernetes_pod_controller_kind
: pod控制器的对象类型。__meta_kubernetes_pod_controller_name
: pod控制器名称。
端点
的端点
角色从列出的服务端点发现目标。对于每个端点地址,每个端口发现一个目标。如果端点由pod支持,那么该pod的所有其他容器端口(未绑定到端点端口)也将被发现为目标。
可用的元标签:
__meta_kubernetes_namespace
:端点对象的名称空间。__meta_kubernetes_endpoints_name
:端点对象的名称。- 对于所有直接从端点列表中发现的目标(那些没有从底层pod中额外推断出来的目标),附加以下标签:
__meta_kubernetes_endpoint_hostname
:终端的主机名。__meta_kubernetes_endpoint_node_name
:承载端点的节点名称。__meta_kubernetes_endpoint_ready
:设置为真正的
或假
端点的就绪状态。__meta_kubernetes_endpoint_port_name
:端点端口名称。__meta_kubernetes_endpoint_port_protocol
:终端端口协议。__meta_kubernetes_endpoint_address_target_kind
:类似于端点地址目标。__meta_kubernetes_endpoint_address_target_name
:端点地址目标的名称。
- 对象的所有标签都属于服务
角色:服务
发现附呈。 - 对于所有被吊舱支持的目标,所有的标签
角色:豆荚
发现附呈。
入口
的入口
角色为每个入口的每个路径发现一个目标。这对于黑箱监视入口通常很有用。地址将被设置为入口规范中指定的主机。
可用的元标签:
__meta_kubernetes_namespace
:入口对象的名称空间。__meta_kubernetes_ingress_name
:入口对象的名称。__meta_kubernetes_ingress_label_ < labelname >
:来自入口对象的每个标签。__meta_kubernetes_ingress_labelpresent_ < labelname >
:真正的
对于来自入口对象的每个标签。__meta_kubernetes_ingress_annotation_ < annotationname >
:来自入口对象的每个注释。__meta_kubernetes_ingress_annotationpresent_ < annotationname >
:真正的
对于来自入口对象的每个注释。__meta_kubernetes_ingress_scheme
:进入协议方案,https
如果设置了TLS配置。默认为http
.__meta_kubernetes_ingress_path
:入口规格的路径。默认为/
.
Kubernetes发现的配置选项如下:
#访问Kubernetes API的信息。# API服务器地址。如果为空,假设Prometheus在集群的#中运行,并自动发现API服务器,并使用pod的# CA证书和位于/var/run/secrets/kubernetes.io/serviceaccount/的记名令牌文件。[api_server: ] #需要发现的实体的Kubernetes角色role: #可选的认证信息,用于向API服务器进行认证。注意“basic_auth”,“bearer_token”和“bearer_token_file”选项是互斥的。# password和password_file互斥。#可选HTTP基本认证信息。basic_auth: [username: ] [password: ] [password_file: ] #可选的记名令牌认证信息。[bearer_token: ] #可选承载令牌文件认证信息。 [ bearer_token_file: ] # Optional proxy URL. [ proxy_url: ] # TLS configuration. tls_config: [ ] # Optional namespace discovery. If omitted, all namespaces are used. namespaces: names: [ - ] # Optional label and field selectors to limit the discovery process to a subset of available # resources. See # https://kubernetes.io/docs/concepts/overview/working-with-objects/field-selectors/ # and https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ to learn # more about the possible filters that can be used. The endpoints role supports pod, # service, and endpoint selectors. Roles only support selectors matching the role itself; # for example, the node role can only contain node selectors. # Note: When making decisions about using field/label selectors, make sure that this # is the best approach. It will prevent Promtail from reusing single list/watch # for all scrape configurations. This might result in a bigger load on the Kubernetes API, # because for each selector combination, there will be additional LIST/WATCH. # On the other hand, if you want to monitor a small subset of pods of a large cluster, # we recommend using selectors. The decision on the use of selectors or not depends # on the particular situation. [ selectors: [ - role: [ label: ] [ field: ] ]]
在哪里< >角色
必须端点
,服务
,圆荚体
,节点
,或入口
.
看到这个Prometheus配置文件的例子为Kubernetes配置Prometheus的详细示例。
你可能希望去第三方那里看看普罗米修斯运营商,它在Kubernetes之上自动化了Prometheus的设置。
consul_sd_config
Consul SD配置允许从Consul目录API.当使用Catalog API时,每个运行的Promtail将在发现新目标时获得整个consul集群已知的所有服务的列表。
期间,目标上可用以下元标签重新确认:
__meta_consul_address
:目标器地址__meta_consul_dc
:目标的数据中心名称__meta_consul_health
:服务的运行状况__meta_consul_metadata_关键> <
:目标的每个节点元数据键值__meta_consul_node
:为目标定义的节点名__meta_consul_service_address
:目标器业务地址__meta_consul_service_id
:目标器的服务ID__meta_consul_service_metadata_关键> <
:目标器的每个业务元数据键值__meta_consul_service_port
:目标器业务端口__meta_consul_service
:目标器所属服务的名称__meta_consul_tagged_address_关键> <
:目标的每个节点标记地址键值__meta_consul_tags
:由标签分隔符连接的目标的标签列表
#访问Consul Catalog API的信息。它被定义为Consul文档所要求的#。[server: | default = "localhost:8500"] [token: ] [datacenter: ] [scheme: | default = "http"] [username: ] [password: ] tls_config: [] #检索目标的服务列表。如果省略,所有服务#将被删除。services: [- ] #参见https://www.consul.io/api/catalog.html#list-nodes-for-service了解更多关于可能使用的过滤器。#一个可选的标签列表,用于为给定的服务筛选节点。服务必须包含列表中的所有标记。标签:[- ] #节点元数据键/值对用于为给定服务筛选节点。[node_meta: [: …]Consul标签连接到标签标签的字符串。 [ tag_separator: | default = , ] # Allow stale Consul results (see https://www.consul.io/api/features/consistency.html). Will reduce load on Consul. [ allow_stale: | default = true ] # The time after which the provided names are refreshed. # On large setup it might be a good idea to increase this value because the catalog will change all the time. [ refresh_interval: | default = 30s ]
注意,用于刮擦目标的IP号和端口组合为< __meta_consul_address >: < __meta_consul_service_port >
.但是,在一些Consul设置中,相关地址是in的__meta_consul_service_address
.在这些情况下,您可以使用重新用标签标明特色取代特色__address__
标签。
的重新确认阶段是基于任意标签为服务筛选服务或节点的首选且更强大的方法。对于拥有数千个服务的用户来说,直接使用Consul API会更有效,它具有过滤节点的基本支持(目前是通过节点元数据和单个标记)。
consulagent_sd_config
领事代理SD配置允许检索刮擦目标领事的代理API。当使用代理API时,每个运行的Promtail在发现新目标时只会获得在同一主机上运行的本地代理注册的服务。这适用于使用Catalog API太慢或资源密集型的非常大的Consul集群。
期间,目标上可用以下元标签重新确认:
__meta_consulagent_address
:目标器地址__meta_consulagent_dc
:目标的数据中心名称__meta_consulagent_health
:服务的运行状况__meta_consulagent_metadata_关键> <
:目标的每个节点元数据键值__meta_consulagent_node
:为目标定义的节点名__meta_consulagent_service_address
:目标器业务地址__meta_consulagent_service_id
:目标器的服务ID__meta_consulagent_service_metadata_关键> <
:目标器的每个业务元数据键值__meta_consulagent_service_port
:目标器业务端口__meta_consulagent_service
:目标器所属服务的名称__meta_consulagent_tagged_address_关键> <
:目标的每个节点标记地址键值__meta_consulagent_tags
:由标签分隔符连接的目标的标签列表
#访问Consul Agent API的信息。它被定义为Consul文档所要求的#。[server: | default = "localhost:8500"] [token: ] [datacenter: ] [scheme: | default = "http"] [username: ] [password: ] tls_config: [] #检索目标的服务列表。如果省略,所有服务#将被删除。services: [- ] #参见https://www.consul.io/api-docs/agent/service#filtering了解更多关于可能使用的过滤器。#一个可选的标签列表,用于为给定的服务筛选节点。服务必须包含列表中的所有标记。标签:[- ] #节点元数据键/值对用于为给定服务筛选节点。[node_meta: [: …]Consul标签连接到标签标签的字符串。 [ tag_separator: | default = , ]
注意,用于刮擦目标器的IP地址和端口号组合为< __meta_consul_address >: < __meta_consul_service_port >
.但是,在一些Consul设置中,相关地址是in的__meta_consul_service_address
.在这些情况下,您可以使用重新用标签标明特色取代特色__address__
标签。
的重新确认阶段是基于任意标签为服务筛选服务或节点的首选且更强大的方法。对于拥有数千个服务的用户来说,直接使用Consul API会更有效,它具有过滤节点的基本支持(目前是通过节点元数据和单个标记)。
docker_sd_config
Docker服务发现允许从Docker守护进程中检索目标。它将只监视被host参数引用的Docker守护进程的容器。Docker服务发现应该在分布式设置中的每个节点上运行。容器必须使用json文件或journald日志记录的司机。
请注意,发现将不会拾取已完成的容器。这意味着Promtail在重新启动后不会从已完成的容器中抓取剩余的日志。
该配置从普罗米修斯的Docker服务发现.
# Docker守护进程地址。使用unix: / / / var /运行/码头工人。袜子本地设置。host: #可选代理URL。[proxy_url: ] # TLS配置。tls_config: [] #当' role '是节点时,对于发现的#任务和服务没有发布端口,从该端口获取指标。[port: | default = 80] #容器为主机组网模式时使用的主机。[host_networking_host: | default = "localhost"] #可选过滤器,将发现过程限制在可用#资源的子集。# Containers: https://docs.docker.com/engine/api/v1.41/#operation/ContainerList [filters: [- name: values: ,[…][]] #容器刷新的时间。[refresh_interval: | default = 60s] # Promtail向# Docker守护进程验证自身的认证信息。注意' basic_auth '和' authorization '选项是互斥的。 # `password` and `password_file` are mutually exclusive. # Optional HTTP basic authentication information. basic_auth: [ username: ] [ password: ] [ password_file: ] # Optional `Authorization` header configuration. authorization: # Sets the authentication type. [ type: | default: Bearer ] # Sets the credentials. It is mutually exclusive with # `credentials_file`. [ credentials: ] # Sets the credentials to the credentials read from the configured file. # It is mutually exclusive with `credentials`. [ credentials_file: ] # Optional OAuth 2.0 configuration. # Cannot be used at the same time as basic_auth or authorization. oauth2: [ ] # Configure whether HTTP requests follow HTTP 3xx redirects. [ follow_redirects: | default = true ]
可用的元标签:
__meta_docker_container_id
:容器ID__meta_docker_container_name
:容器的名称__meta_docker_container_network_mode
:容器的网络模式__meta_docker_container_label_ < labelname >
:容器的每个标签__meta_docker_container_log_stream
:日志流类型stdout
或stderr
__meta_docker_network_id
:网络ID__meta_docker_network_name
:网络名称__meta_docker_network_ingress
:网络是否进入__meta_docker_network_internal
:是否为内部网络__meta_docker_network_label_ < labelname >
:网络的每个标签__meta_docker_network_scope
:网络的范围__meta_docker_network_ip
:该网络中容器的IP地址__meta_docker_port_private
:集装箱上的端口__meta_docker_port_public
:如果存在端口映射,则为外部端口__meta_docker_port_public_ip
:如果存在端口映射,则为公网IP
这些标签可以在重新打标签时使用。例如,下面的配置删除名为鞭打
并删除前导斜杠(/
)从容器名称。
Scrape_configs:—job_name: fllog_scrape docker_sd_configs:—host: unix:///var/run/docker. exeSock refresh_interval: 5s filters:—name: name values: [flog] relabel_configs:—source_labels: ['__meta_docker_container_name'] regex: '/(.*)' target_label: 'container'
limits_config
可选limits_config
block为Promtail实例配置全局限制。
#当为true时,强制对Promtail实例进行速率限制。[readline_rate_enabled: | default = false] #此Promtail实例可能推送到Loki的每秒日志行数限制。[readline_rate: | default = 10000][readline_burst: | default = 10000] #当值为真时,超过速率限制会导致Promtail实例丢弃# log行,而不是将它们发送给Loki。当为false时,超过速率限制#会导致Promtail实例暂时暂停发送日志行并稍后重试。[readline_rate_drop: | default = true] #限制活动流的最大数量。限制流的数量作为Promtail限制内存使用的机制非常有用,这有助于避免OOM场景。# 0表示禁用。[max_streams: | default = 0] #允许的最大日志行字节大小。例如:256kb, 2M。 0 to disable. [max_line_size: | default = 0] # Whether to truncate lines that exceed max_line_size. No effect if max_line_size is disabled [max_line_size_truncate: | default = false]
target_config
的target_config
块控制从发现的目标读取文件的行为。
重新同步被监视的目录和被跟踪的文件,以发现#新目录或停止监视已删除的目录。sync_period:“10”
options_config
#弃用。一个逗号分隔的标签列表,包含在流延迟度量# ' promtail_stream_lag_seconds '中。系统默认值为filename。“host”标签总是包含在#中。流延迟度量表明哪些流在写入Loki时落后于#;注意不要使用太多标签,#因为它会增加基数。[stream_lag_labels: | default = "filename"]
tracing_config
的跟踪
block为Jaeger配置跟踪。目前,仅限于每个配置环境变量只有。
#当为true时,[enabled: | default = false]
使用实例Docker Config
在独立机器上跟踪Docker文件是相当困难的,因为它们在每个操作系统的不同位置。我们推荐Docker日志驱动程序用于本地Docker安装或Docker Compose。
如果运行在Kubernetes环境中,您应该查看其中的已定义配置舵而且jsonnet,它们利用prometheus服务发现库(并为Promtail命名)自动查找和跟踪pod。jsonnet配置用注释解释了每个部分的用途。
使用实例静态配置
虽然Promtail可能是根据prometheus服务发现代码命名的,但相同的代码可以很好地用于跟踪日志,而不需要直接在虚拟机或裸机上使用容器或容器环境。
服务器:http_listen_port: 9080 grpc_listen_port: 0位置:文件名:/var/log/位置yaml#这个位置需要由Promtail可写。—url: http://ip_or_hostname_where_Loki_run:3100/loki/api/v1/push scrape_configs:—job_name: system pipeline_stages: static_configs:—targets:—localhost labels: job: varlogs #“job”标签在prometheus中是相当标准的,用于链接度量和日志。“host”标签将帮助区分这台机器的日志与其他机器的日志__path__: /var/log/*.log #匹配的路径使用第三方库:https://github.com/bmatcuk/doublestar
如果您正在旋转日志,在使用通配符模式时要小心* . log
,并确保它与旋转的日志文件不匹配。例如,如果您将日志从server.log
来server.01 - 01 - 1970. -日志
每晚在相同的目录下,一个带有通配符搜索模式的静态配置* . log
将获取新文件并读取它,有效地导致重新摄入整个日日志。
使用实例配置静态目标
虽然Promtail可能是根据prometheus服务发现代码命名的,但相同的代码可以很好地用于跟踪日志,而不需要直接在虚拟机或裸机上使用容器或容器环境。
服务器:http_listen_port: 9080 grpc_listen_port: 0位置:文件名:/var/log/位置yaml#这个位置需要由Promtail可写。—url: http://ip_or_hostname_where_Loki_run:3100/loki/api/v1/push scrape_configs:—job_name: system pipeline_stages: static_configs:—labels: job: varlogs #“job”标签在prometheus中是相当标准的,用于链接度量和日志。“host”标签将帮助区分这台机器的日志与其他机器的日志__path__: /var/log/*.log #匹配的路径使用第三方库:https://github.com/bmatcuk/doublestar
日志配置
下面的例子从systemd日志中读取条目:
服务器:http_listen_port: 9080 grpc_listen_port: 0位置:文件名:/tmp/位置。Yaml客户端:- url: http://ip_or_hostname_where_loki_runs:3100/loki/api/v1/push scrape_configs: - job_name: journal journal: max_age: 12h labels: job: system -journal relabel_configs: - source_labels: ['__journal__systemd_unit'] target_label: 'unit'
Syslog配置
这个例子启动Promtail作为syslog接收端,并且可以通过TCP接受Promtail中的syslog条目:
服务器:http_listen_port: 9080 grpc_listen_port: 0位置:文件名:/tmp/位置。Yaml客户端:—url: http://loki_addr:3100/loki/api/v1/push scrape_configs:—job_name: syslog syslog: listen_address: 0.0.0.0:1514 labels: job:“syslog”relabel_configs:—source_labels: ['__syslog_message_hostname'] target_label: 'host'
使用实例推送配置
示例启动Promtail作为推送接收器,并将接受来自其他Promtail实例或Docker日志记录驱动程序的日志:
服务器:http_listen_port: 9080 grpc_listen_port: 0位置:文件名:/tmp/位置。yaml客户端:—url: http://ip_or_hostname_where_Loki_run:3100/loki/api/v1/push scrape_configs:—job_name: push1 loki_push_api: server: http_listen_port: 3500 grpc_listen_port: 3600 labels: pushserver: push1
请注意job_name
必须提供并且在多个之间必须是唯一的loki_push_api
Scrape_configs,它将用于注册指标。
创建一个新的服务器实例,以便http_listen_port
而且grpc_listen_port
肯定和Promtail不一样吧服务器
配置部分(除非已禁用)
你可以设置grpc_listen_port
来0
如果不使用httpgrpc,分配一个随机端口。