洛基.源.云flare
loki.source.cloudflare
从Cloudflare Logpull API获取日志并将其转发到其他 loki.*
组件。
这些日志包含连接客户端的相关数据、通过Cloudflare网络请求的路径以及原始Web服务器的响应,可用于丰富原始服务器上的现有日志。
您可以通过为它们不同的标签来指定多个 loki.source.cloudflare
组件。
用法
loki.source.cloudflare "LABEL" {
zone_id = "ZONE_ID"
api_token = "API_TOKEN"
forward_to = RECEIVER_LIST
}
参数
loki.source.cloudflare
支持以下参数
名称 | 类型 | 说明 | 默认值 | 必需 |
---|---|---|---|---|
forward_to | 列表(LogsReceiver) | 要发送日志条目的接收器列表。 | 是 | |
api_token | 字符串 | 用于认证的API令牌。 | 是 | |
zone_id | 字符串 | 要使用的Cloudflare区域ID。 | 是 | |
labels | 映射(string) | 与传入日志条目关联的标签。 | {} | 否 |
workers | 整数 | 用于解析日志的工作进程数。 | 3 | 否 |
pull_range | 持续时间 | 每次拉取请求要获取的时间范围。 | "1m" | 否 |
fields_type | 字符串 | 要获取日志条目的字段集。 | "default" | 否 |
additional_fields | 列表(string) | 通过 fields_type 提供的字段的补充列表。 | 否 |
默认情况下,loki.source.cloudflare
使用 default
集合的字段获取日志。以下是可供选择的不同 fields_type
集合,以及它们包含的字段:
- "default" 包含
"ClientIP", "ClientRequestHost", "ClientRequestMethod", "ClientRequestURI", "EdgeEndTimestamp", "EdgeResponseBytes", "EdgeRequestHost", "EdgeResponseStatus", "EdgeStartTimestamp", "RayID"
以及通过 additional_fields
参数提供的任何额外字段。
- "minimal" 包含所有
default
字段和
"ZoneID", "ClientSSLProtocol", "ClientRequestProtocol", "ClientRequestPath", "ClientRequestUserAgent", "ClientRequestReferer", "EdgeColoCode", "ClientCountry", "CacheCacheStatus", "CacheResponseStatus", "EdgeResponseContentType"
以及通过 additional_fields
参数提供的任何额外字段。
- "extended" 包含所有
minimal
字段和
"ClientSSLCipher", "ClientASN", "ClientIPClass", "CacheResponseBytes", "EdgePathingOp", "EdgePathingSrc", "EdgePathingStatus", "ParentRayID", "WorkerCPUTime", "WorkerStatus", "WorkerSubrequest", "WorkerSubrequestCount", "OriginIP", "OriginResponseStatus", "OriginSSLProtocol", "OriginResponseHTTPExpires", "OriginResponseHTTPLastModified"
以及通过 additional_fields
参数提供的任何额外字段。
- "all" 包含所有
extended
字段和
"BotScore", "BotScoreSrc", "BotTags", "ClientRequestBytes", "ClientSrcPort", "ClientXRequestedWith", "CacheTieredFill", "EdgeResponseCompressionRatio", "EdgeServerIP", "FirewallMatchesSources", "FirewallMatchesActions", "FirewallMatchesRuleIDs", "OriginResponseBytes", "OriginResponseTime", "ClientDeviceType", "WAFFlags", "WAFMatchedVar", "EdgeColoID", "RequestHeaders", "ResponseHeaders", "ClientRequestSource"`
以及通过 additional_fields
参数提供的任何额外字段。即使在Cloudflare API中提供了新的字段,但在 all
中尚未包含,这也仍然适用。
- "custom" 仅包含
additional_fields
中定义的字段。
组件将其上次成功获取的时间戳保存在其位置文件中。如果文件中存在给定区域ID的位置,组件会从该时间戳重新启动拉取日志。如果没有找到位置,组件会从当前时间开始拉取日志。
日志通过多个workers
获取,它们不断请求最后的可用pull_range
。由于每次拉取要处理的日志行数过多,可能会落后。增加工作者、减小拉取范围或减少获取的字段数量可以缓解此性能问题。
组件获取的最后时间戳记录在调试指标loki_source_cloudflare_target_last_requested_end_timestamp
中。
所有来自Cloudflare的日志条目都在JSON格式中。您可以使用loki.process
组件和一个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",
"ClientRequestSource": "1"
"ClientSSLCipher": "ECDHE-ECDSA-AES128-GCM-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,
"EdgeServerIP": "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",
"WAFFlags": "0",
"WAFMatchedVar": "",
"WAFProfile": "unknown",
"WAFRuleID": "",
"WAFRuleMessage": "",
"WorkerCPUTime": 0,
"WorkerStatus": "unknown",
"WorkerSubrequest": false,
"WorkerSubrequestCount": 0,
"ZoneID": 1234
}
导出字段
loki.source.cloudflare
不导出任何字段。
组件健康状况
loki.source.cloudflare
仅在下发无效配置时报告为不健康。
调试信息
loki.source.cloudflare
公开以下调试信息:
- 目标是否已准备好以及是否从API读取日志。
- Cloudflare区域ID。
- 如果有,报告的最后错误。
- 作为
zone_id
、标签和最后拉取时间戳组合的存储位置文件条目。 - 最后拉取的时间戳。
- 正在获取的字段集。
调试指标
loki_source_cloudflare_target_entries_total
(计数器):通过云flare目标成功发送的条目总数。loki_source_cloudflare_target_last_requested_end_timestamp
(量表计):用于计算目标落后程度的最后Cloudflare请求结束时间戳。
示例
此示例从Cloudflare API检索日志并将它们传递到loki.write
组件。
loki.source.cloudflare "dev" {
zone_id = env("CF_ZONE_ID")
api_token = local.file.api.content
forward_to = [loki.write.local.receiver]
}
loki.write "local" {
endpoint {
url = "loki:3100/api/v1/push"
}
}
兼容组件
loki.source.cloudflare
可以接受以下组件的参数
- 导出Loki
LogsReceiver
的组件
注意
连接某些组件可能不合理,或者组件可能需要进一步配置才能正确连接。请参阅相关文档以获取更多详细信息。