Cloudflare 集成
编辑Cloudflare 集成
编辑Cloudflare 集成使用 Cloudflare 的 API 来检索特定区域的 审计日志 和 流量日志,并将它们摄取到 Elasticsearch 中。这允许您通过 Elasticsearch 搜索、观察和可视化 Cloudflare 日志事件。
Cloudflare 的用户使用 Cloudflare 服务来提高其网站和服务的安全性和性能。
配置
编辑在 Elastic 中启用集成
编辑- 在 Kibana 中,转到 管理 > 集成
- 在“搜索集成”搜索栏中,键入 Cloudflare。
- 从搜索结果中单击“Cloudflare”集成。
- 单击 添加 Cloudflare 按钮以添加 Cloudflare 集成。
配置 Cloudflare 审计日志数据流
编辑输入值“身份验证电子邮件”、“身份验证密钥”和“帐户 ID”。
有关身份验证电子邮件和身份验证密钥的更多信息,请参见 X-AUTH-EMAIL
和 X-AUTH-KEY
此处。
配置 Cloudflare 日志
编辑这些日志包含与连接的客户端、通过 Cloudflare 网络的请求路径以及来自源 Web 服务器的响应相关的数据。有关更多信息,请参见 此处。
集成可以使用以下方式检索 Cloudflare 日志:
- 身份验证电子邮件和身份验证密钥
- API 令牌
更多信息请参见 此处
使用身份验证电子邮件和身份验证密钥进行配置
编辑输入值“身份验证电子邮件”、“身份验证密钥”和“区域 ID”。
有关身份验证电子邮件和身份验证密钥的更多信息,请参见 X-AUTH-EMAIL
和 X-AUTH-KEY
此处。
使用 API 令牌进行配置
编辑输入值“API 令牌”和“区域 ID”。
为了使 Cloudflare 集成能够成功获取日志,必须向 API 令牌授予以下权限:
日志
编辑审计
编辑审计日志总结了在您的 Cloudflare 帐户中所做的更改的历史记录。审计日志包括帐户级别的操作,如登录和注销,以及对 DNS、加密、防火墙、速度、缓存、页面规则、网络和流量功能等的设置更改。
导出的字段
字段 | 描述 | 类型 |
---|---|---|
@timestamp |
事件时间戳。 |
日期 |
cloud.image.id |
云实例的映像 ID。 |
关键字 |
cloudflare.audit.actor.type |
参与者的类型,是用户、Cloudflare 管理员还是自动化系统。有效值为:user、admin、Cloudflare。 |
关键字 |
cloudflare.audit.metadata |
一个对象,可以为正在记录的操作提供更多上下文。这是一个灵活的值,在不同的操作之间会有所不同。 |
扁平化 |
cloudflare.audit.new_value |
已修改的资源的新值 |
扁平化 |
cloudflare.audit.old_value |
资源在被修改之前的值 |
扁平化 |
cloudflare.audit.owner.id |
用户标识符标签 |
关键字 |
cloudflare.audit.resource.id |
受操作影响的资源的标识符 |
关键字 |
cloudflare.audit.resource.type |
一个简短的字符串,描述了受操作影响的资源 |
关键字 |
data_stream.dataset |
数据流数据集名称。 |
常量关键字 |
data_stream.namespace |
数据流命名空间。 |
常量关键字 |
data_stream.type |
数据流类型。 |
常量关键字 |
event.dataset |
事件数据集 |
常量关键字 |
event.module |
事件模块 |
常量关键字 |
host.containerized |
如果主机是容器。 |
布尔值 |
host.os.build |
操作系统版本信息。 |
关键字 |
host.os.codename |
操作系统代号(如果有)。 |
关键字 |
input.type |
Filebeat 输入的类型。 |
关键字 |
log.flags |
日志文件的标志。 |
关键字 |
log.offset |
日志文件中条目的偏移量。 |
长整型 |
示例
audit
的示例事件如下所示
{ "@timestamp": "2021-11-30T13:42:04.000Z", "agent": { "ephemeral_id": "c1f5062e-f467-4812-af6a-7d4b4e7c942d", "id": "4b6522ee-8519-493a-b53a-a85672045358", "name": "docker-fleet-agent", "type": "filebeat", "version": "8.10.1" }, "cloud": { "account": { "id": "aaabbbccc" }, "provider": "cloudflare" }, "cloudflare": { "audit": { "actor": { "type": "user" }, "owner": { "id": "enl3j9du8rnx2swwd9l32qots7l54t9s" }, "resource": { "id": "enl3j9du8rnx2swwd9l32qots7l54t9s", "type": "account" } } }, "data_stream": { "dataset": "cloudflare.audit", "namespace": "ep", "type": "logs" }, "ecs": { "version": "8.11.0" }, "elastic_agent": { "id": "4b6522ee-8519-493a-b53a-a85672045358", "snapshot": false, "version": "8.10.1" }, "event": { "action": "rotate_api_key", "agent_id_status": "verified", "category": [ "iam" ], "created": "2023-10-10T14:41:04.679Z", "dataset": "cloudflare.audit", "id": "8d3396e8-c903-5a66-9421-00fc34570550", "ingested": "2023-10-10T14:41:05Z", "kind": "event", "original": "{\"action\":{\"info\":\"key digest: c6b5d100d7ce492d24c5b13160fce1cc0092ce7e8d8430e9f5cf5468868be6f6\",\"result\":true,\"type\":\"rotate_API_key\"},\"actor\":{\"email\":\"[email protected]\",\"id\":\"enl3j9du8rnx2swwd9l32qots7l54t9s\",\"ip\":\"52.91.36.10\",\"type\":\"user\"},\"id\":\"8d3396e8-c903-5a66-9421-00fc34570550\",\"interface\":\"\",\"metadata\":{},\"newValue\":\"\",\"oldValue\":\"\",\"owner\":{\"id\":\"enl3j9du8rnx2swwd9l32qots7l54t9s\"},\"resource\":{\"id\":\"enl3j9du8rnx2swwd9l32qots7l54t9s\",\"type\":\"account\"},\"when\":\"2021-11-30T13:42:04Z\"}", "outcome": "success", "type": [ "change" ] }, "input": { "type": "httpjson" }, "related": { "ip": [ "52.91.36.10" ], "user": [ "enl3j9du8rnx2swwd9l32qots7l54t9s" ] }, "source": { "address": "52.91.36.10", "ip": "52.91.36.10" }, "tags": [ "forwarded", "cloudflare-audit", "preserve_original_event" ], "user": { "email": "[email protected]", "id": "enl3j9du8rnx2swwd9l32qots7l54t9s" } }
Logpull
编辑这些日志包含与连接的客户端、通过 Cloudflare 网络的请求路径以及来自源 Web 服务器的响应相关的数据。有关更多信息,请参见 此处。
导出的字段
字段 | 描述 | 类型 |
---|---|---|
@timestamp |
事件时间戳。 |
日期 |
cloudflare.bot.score.src |
负责生成 Bot 分数的检测引擎。可能的值为“未计算”、“启发式”、“机器学习”、“行为分析”、“已验证的 Bot”、“JS 指纹识别”、“Cloudflare 服务”。 |
文本 |
cloudflare.bot.score.value |
Cloudflare Bot 分数。低于 30 的分数通常与自动化流量相关。 |
长整型 |
cloudflare.cache.bytes |
缓存返回的字节数 |
长整型 |
cloudflare.cache.status |
缓存状态 |
关键字 |
cloudflare.cache.status_code |
缓存返回到边缘的 HTTP 状态代码。所有请求(包括不可缓存的请求)都将通过缓存。 |
长整型 |
cloudflare.cache.tiered_fill |
使用分层缓存来服务此请求 |
布尔值 |
cloudflare.client.ip_class |
客户端的类别,例如 badHost |
searchEngine |
allowlist |
greylist… |
关键字 |
cloudflare.client.ssl.protocol |
客户端 SSL (TLS) 协议 |
关键字 |
cloudflare.device_type |
客户端设备类型 |
关键字 |
cloudflare.edge.colo.code |
接收请求的数据中心的 IATA 机场代码 |
关键字 |
cloudflare.edge.colo.id |
Cloudflare 边缘数据中心 ID |
长整型 |
cloudflare.edge.pathing.op |
指示为此请求发出的响应类型(unknown = 无特定操作) |
关键字 |
cloudflare.edge.pathing.src |
详细说明如何基于安全检查对请求进行分类(unknown = 无特定分类) |
关键字 |
cloudflare.edge.pathing.status |
指示使用什么数据来确定此请求的处理(unknown = 无数据) |
关键字 |
cloudflare.edge.rate_limit.action |
阻止规则采取的操作;如果未采取任何操作,则为空 |
关键字 |
cloudflare.edge.rate_limit.id |
触发阻止(禁止)或日志操作的速率限制规则的内部规则 ID。如果未采取任何操作,则为 0。 |
长整型 |
cloudflare.edge.request.host |
从边缘到源的请求中的 Host 标头 |
关键字 |
cloudflare.edge.response.bytes |
边缘返回给客户端的字节数 |
长整型 |
cloudflare.edge.response.compression_ratio |
边缘响应压缩比 |
长整型 |
cloudflare.edge.response.content_type |
边缘响应 Content-Type 标头值 |
关键字 |
cloudflare.edge.response.status_code |
Cloudflare 返回给客户端的 HTTP 状态代码 |
长整型 |
cloudflare.firewall.actions |
Cloudflare 防火墙产品对此请求执行的操作数组。与此操作关联的单个防火墙产品可以在 FirewallMatchesSources 中找到,它们各自的 RuleIds 可以在 FirewallMatchesRuleIDs 中找到。数组的长度与 FirewallMatchesRuleIDs 和 FirewallMatchesSources 的长度相同。 |
关键字 |
cloudflare.firewall.rule_ids |
与请求匹配的防火墙产品的 RuleID 数组。与 RuleID 关联的防火墙产品可以在 FirewallMatchesSources 中找到。数组的长度与 FirewallMatchesActions 和 FirewallMatchesSources 的长度相同。 |
关键字 |
cloudflare.firewall.sources |
与请求匹配的防火墙产品。同一产品可能会出现多次,这表示已激活不同的规则或操作。RuleID 可以在 FirewallMatchesRuleIDs 中找到,操作可以在 FirewallMatchesActions 中找到。数组的长度与 FirewallMatchesRuleIDs 和 FirewallMatchesActions 的长度相同。 |
关键字 |
cloudflare.origin.response.bytes |
源服务器返回的字节数 |
长整型 |
cloudflare.origin.response.expires |
源 expires 标头的值 |
日期 |
cloudflare.origin.response.last_modified |
源 last-modified 标头的值 |
日期 |
cloudflare.origin.response.status_code |
源服务器返回的状态 |
长整型 |
cloudflare.origin.response.time |
源服务器将响应返回到边缘所花费的纳秒数 |
长整型 |
cloudflare.origin.ssl.protocol |
用于连接到源的 SSL (TLS) 协议 |
关键字 |
cloudflare.parent.ray_id |
如果此请求是使用 Worker 脚本发出的,则为父请求的 Ray ID |
关键字 |
cloudflare.ray_id |
如果此请求是使用 Worker 脚本发出的,则为父请求的 Ray ID |
关键字 |
cloudflare.security_level |
发出此请求时配置的安全级别。这用于确定 IP 信誉系统的敏感度。 |
关键字 |
cloudflare.waf.action |
如果触发,则 WAF 采取的操作 |
关键字 |
cloudflare.waf.flags |
其他配置标志:模拟 (0x1) |
空 |
关键字 |
cloudflare.waf.matched_var |
最近匹配的变量的全名 |
关键字 |
cloudflare.waf.profile |
低 |
中 |
高 |
关键字 |
cloudflare.waf.rule.id |
应用的 WAF 规则的 ID |
关键字 |
cloudflare.waf.rule.message |
与触发的规则关联的规则消息 |
关键字 |
cloudflare.worker.cpu_time |
执行 worker 所花费的时间量(以微秒为单位,如果有) |
长整型 |
cloudflare.worker.status |
从 worker 守护程序返回的状态 |
关键字 |
cloudflare.worker.subrequest |
此请求是否为 worker 子请求 |
布尔值 |
cloudflare.worker.subrequest_count |
worker 在处理此请求时发出的子请求数 |
长整型 |
cloudflare.zone.id |
内部区域 ID |
长整型 |
cloudflare.zone.name |
区域的人类可读名称(例如,cloudflare.com)。 |
关键字 |
data_stream.dataset |
数据流数据集名称。 |
常量关键字 |
data_stream.namespace |
数据流命名空间。 |
常量关键字 |
data_stream.type |
数据流类型。 |
常量关键字 |
event.dataset |
事件数据集 |
常量关键字 |
event.module |
事件模块 |
常量关键字 |
host.containerized |
如果主机是容器。 |
布尔值 |
host.os.build |
操作系统版本信息。 |
关键字 |
host.os.codename |
操作系统代号(如果有)。 |
关键字 |
input.type |
Filebeat 输入的类型。 |
关键字 |
log.flags |
日志文件的标志。 |
关键字 |
log.offset |
日志文件中条目的偏移量。 |
长整型 |
示例
logpull
的示例事件如下所示
{ "@timestamp": "2019-08-02T15:29:08.000Z", "agent": { "ephemeral_id": "a27dd9de-634b-47ac-a284-09aaea297972", "id": "4b6522ee-8519-493a-b53a-a85672045358", "name": "docker-fleet-agent", "type": "filebeat", "version": "8.10.1" }, "client": { "address": "35.232.161.245", "as": { "number": 15169 }, "bytes": 2577, "geo": { "country_iso_code": "us" }, "ip": "35.232.161.245", "port": 55028 }, "cloudflare": { "cache": { "status": "unknown", "tiered_fill": false }, "client": { "ip_class": "noRecord", "ssl": { "protocol": "TLSv1.2" } }, "device_type": "desktop", "edge": { "colo": { "id": 14 }, "pathing": { "op": "wl", "src": "filter_based_firewall", "status": "captchaNew" }, "rate_limit": { "id": 0 }, "response": { "bytes": 2848, "compression_ratio": 2.64, "content_type": "text/html", "status_code": 403 } }, "firewall": { "actions": [ "simulate", "challenge" ], "rule_ids": [ "094b71fea25d4860a61fa0c6fbbd8d8b", "e454fd4a0ce546b3a9a462536613692c" ], "sources": [ "firewallRules", "firewallRules" ] }, "origin": { "response": { "bytes": 0, "status_code": 0, "time": 0 }, "ssl": { "protocol": "unknown" } }, "parent": { "ray_id": "00" }, "ray_id": "500115ec386354d8", "security_level": "med", "waf": { "action": "unknown", "flags": "0", "profile": "unknown" }, "worker": { "cpu_time": 0, "status": "unknown", "subrequest": false, "subrequest_count": 0 }, "zone": { "id": 155978002 } }, "data_stream": { "dataset": "cloudflare.logpull", "namespace": "ep", "type": "logs" }, "destination": { "bytes": 2848 }, "ecs": { "version": "8.11.0" }, "elastic_agent": { "id": "4b6522ee-8519-493a-b53a-a85672045358", "snapshot": false, "version": "8.10.1" }, "event": { "action": [ "simulate", "challenge" ], "agent_id_status": "verified", "category": [ "network" ], "created": "2023-10-10T14:42:46.310Z", "dataset": "cloudflare.logpull", "duration": 0, "end": "2019-08-02T15:29:08.000Z", "ingested": "2023-10-10T14:42:49Z", "kind": "event", "original": "{\"CacheCacheStatus\":\"unknown\",\"CacheResponseBytes\":0,\"CacheResponseStatus\":0,\"CacheTieredFill\":false,\"ClientASN\":15169,\"ClientCountry\":\"us\",\"ClientDeviceType\":\"desktop\",\"ClientIP\":\"35.232.161.245\",\"ClientIPClass\":\"noRecord\",\"ClientRequestBytes\":2577,\"ClientRequestHost\":\"cf-analytics.com\",\"ClientRequestMethod\":\"POST\",\"ClientRequestPath\":\"/wp-cron.php\",\"ClientRequestProtocol\":\"HTTP/1.1\",\"ClientRequestReferer\":\"https://cf-analytics.com/wp-cron.php?doing_wp_cron=1564759748.3962020874023437500000\",\"ClientRequestURI\":\"/wp-cron.php?doing_wp_cron=1564759748.3962020874023437500000\",\"ClientRequestUserAgent\":\"WordPress/5.2.2;https://cf-analytics.com\",\"ClientSSLCipher\":\"ECDHE-ECDSA-AES128-GCM-SHA256\",\"ClientSSLProtocol\":\"TLSv1.2\",\"ClientSrcPort\":55028,\"EdgeColoID\":14,\"EdgeEndTimestamp\":\"2019-08-02T15:29:08Z\",\"EdgePathingOp\":\"wl\",\"EdgePathingSrc\":\"filter_based_firewall\",\"EdgePathingStatus\":\"captchaNew\",\"EdgeRateLimitAction\":\"\",\"EdgeRateLimitID\":0,\"EdgeRequestHost\":\"\",\"EdgeResponseBytes\":2848,\"EdgeResponseCompressionRatio\":2.64,\"EdgeResponseContentType\":\"text/html\",\"EdgeResponseStatus\":403,\"EdgeServerIP\":\"\",\"EdgeStartTimestamp\":\"2019-08-02T15:29:08Z\",\"FirewallMatchesActions\":[\"simulate\",\"challenge\"],\"FirewallMatchesRuleIDs\":[\"094b71fea25d4860a61fa0c6fbbd8d8b\",\"e454fd4a0ce546b3a9a462536613692c\"],\"FirewallMatchesSources\":[\"firewallRules\",\"firewallRules\"],\"OriginIP\":\"\",\"OriginResponseBytes\":0,\"OriginResponseHTTPExpires\":\"\",\"OriginResponseHTTPLastModified\":\"\",\"OriginResponseStatus\":0,\"OriginResponseTime\":0,\"OriginSSLProtocol\":\"unknown\",\"ParentRayID\":\"00\",\"RayID\":\"500115ec386354d8\",\"SecurityLevel\":\"med\",\"WAFAction\":\"unknown\",\"WAFFlags\":\"0\",\"WAFMatchedVar\":\"\",\"WAFProfile\":\"unknown\",\"WAFRuleID\":\"\",\"WAFRuleMessage\":\"\",\"WorkerCPUTime\":0,\"WorkerStatus\":\"unknown\",\"WorkerSubrequest\":false,\"WorkerSubrequestCount\":0,\"ZoneID\":155978002}", "start": "2019-08-02T15:29:08.000Z" }, "http": { "request": { "bytes": 2577, "method": "POST", "referrer": "https://cf-analytics.com/wp-cron.php?doing_wp_cron=1564759748.3962020874023437500000" }, "response": { "bytes": 2848, "status_code": 403 }, "version": "1.1" }, "input": { "type": "httpjson" }, "network": { "bytes": 5425, "protocol": "http", "transport": "tcp" }, "observer": { "type": "proxy", "vendor": "cloudflare" }, "server": { "bytes": 2848 }, "source": { "address": "35.232.161.245", "as": { "number": 15169 }, "bytes": 2577, "geo": { "country_iso_code": "us" }, "ip": "35.232.161.245", "port": 55028 }, "tags": [ "forwarded", "cloudflare-logpull", "preserve_original_event" ], "tls": { "cipher": "ECDHE-ECDSA-AES128-GCM-SHA256", "version": "1.2", "version_protocol": "tls" }, "url": { "domain": "cf-analytics.com", "extension": "php", "full": "https://cf-analytics.com/wp-cron.php?doing_wp_cron=1564759748.3962020874023437500000", "original": "/wp-cron.php?doing_wp_cron=1564759748.3962020874023437500000", "path": "/wp-cron.php", "query": "doing_wp_cron=1564759748.3962020874023437500000", "scheme": "https" }, "user_agent": { "device": { "name": "Spider" }, "name": "WordPress", "original": "WordPress/5.2.2;https://cf-analytics.com", "version": "5.2.2" } }
变更日志
编辑变更日志
版本 | 详细信息 | Kibana 版本 |
---|---|---|
2.29.0 |
增强 (查看拉取请求) |
8.13.0 或更高版本 |
2.28.0 |
增强 (查看拉取请求) |
8.13.0 或更高版本 |
2.27.0 |
增强 (查看拉取请求) |
8.13.0 或更高版本 |
2.26.0 |
增强 (查看拉取请求) |
8.12.0 或更高版本 |
2.25.0 |
增强 (查看拉取请求) |
8.12.0 或更高版本 |
2.24.0 |
增强 (查看拉取请求) |
8.12.0 或更高版本 |
2.23.1 |
增强 (查看拉取请求) |
8.10.1 或更高版本 |
2.23.0 |
增强 (查看拉取请求) |
8.10.1 或更高版本 |
2.22.0 |
增强 (查看拉取请求) |
8.10.1 或更高版本 |
2.21.0 |
增强 (查看拉取请求) |
8.10.1 或更高版本 |
2.20.0 |
错误修复 (查看拉取请求) |
8.10.1 或更高版本 |
2.19.1 |
错误修复 (查看拉取请求) |
8.7.1 或更高版本 |
2.19.0 |
增强 (查看拉取请求) |
8.7.1 或更高版本 |
2.18.0 |
增强 (查看拉取请求) |
8.7.1 或更高版本 |
2.17.0 |
增强 (查看拉取请求) |
8.7.1 或更高版本 |
2.16.0 |
增强 (查看拉取请求) |
8.7.1 或更高版本 |
2.15.0 |
增强 (查看拉取请求) |
8.7.1 或更高版本 |
2.14.1 |
错误修复 (查看拉取请求) |
8.7.1 或更高版本 |
2.14.0 |
增强 (查看拉取请求) |
8.7.1 或更高版本 |
2.13.0 |
增强 (查看拉取请求) |
8.7.1 或更高版本 |
2.12.0 |
增强 (查看拉取请求) |
8.7.1 或更高版本 |
2.11.0 |
增强 (查看拉取请求) |
8.7.1 或更高版本 |
2.10.0 |
增强 (查看拉取请求) |
— |
2.9.0 |
增强 (查看拉取请求) |
8.7.1 或更高版本 |
2.8.0 |
增强 (查看拉取请求) |
8.7.1 或更高版本 |
2.7.0 |
增强 (查看拉取请求) |
8.7.1 或更高版本 |
2.6.0 |
增强 (查看拉取请求) |
8.7.1 或更高版本 |
2.5.1 |
错误修复 (查看拉取请求) |
8.4.0 或更高版本 |
2.5.0 |
增强 (查看拉取请求) |
8.0.0 或更高版本 |
2.4.2 |
增强 (查看拉取请求) |
8.0.0 或更高版本 |
2.4.1 |
错误修复 (查看拉取请求) |
8.0.0 或更高版本 |
2.4.0 |
增强 (查看拉取请求) |
8.0.0 或更高版本 |
2.3.1 |
增强 (查看拉取请求) |
8.0.0 或更高版本 |
2.3.0 |
增强 (查看拉取请求) |
8.0.0 或更高版本 |
2.2.4 |
错误修复 (查看拉取请求) |
8.0.0 或更高版本 |
2.2.3 |
增强 (查看拉取请求) |
8.0.0 或更高版本 |
2.2.2 |
错误修复 (查看拉取请求) |
8.0.0 或更高版本 |
2.2.1 |
增强 (查看拉取请求) |
8.0.0 或更高版本 |
2.2.0 |
增强 (查看拉取请求) |
8.0.0 或更高版本 |
2.1.3 |
错误修复 (查看拉取请求) |
8.0.0 或更高版本 |
2.1.2 |
增强 (查看拉取请求) |
8.0.0 或更高版本 |
2.1.1 |
错误修复 (查看拉取请求) |
8.0.0 或更高版本 |
2.1.0 |
增强 (查看拉取请求) |
8.0.0 或更高版本 |
2.0.1 |
增强 (查看拉取请求) |
8.0.0 或更高版本 |
2.0.0 |
增强 (查看拉取请求) |
8.0.0 或更高版本 |
1.4.2 |
增强 (查看拉取请求) |
7.16.0 或更高版本 |
1.4.1 |
增强 (查看拉取请求) |
— |
1.4.0 |
增强 (查看拉取请求) |
— |
1.3.2 |
增强 (查看拉取请求) |
7.16.0 或更高版本 |
1.3.1 |
错误修复 (查看拉取请求) |
7.16.0 或更高版本 |
1.3.0 |
增强 (查看拉取请求) |
7.16.0 或更高版本 |
1.2.1 |
错误修复 (查看拉取请求) |
7.16.0 或更高版本 |
1.2.0 |
增强 (查看拉取请求) |
— |
1.1.1 |
错误修复 (查看拉取请求) |
— |
1.1.0 |
增强 (查看拉取请求) |
7.16.0 或更高版本 |
1.0.3 |
增强 (查看拉取请求) |
7.16.0 或更高版本 |
1.0.2 |
增强 (查看拉取请求) |
7.16.0 或更高版本 |
1.0.1 |
错误修复 (查看拉取请求) |
— |
1.0.0 |
增强 (查看拉取请求) |
— |
0.2.0 |
增强 (查看拉取请求) |
— |
0.1.1 |
增强 (查看拉取请求) |
— |
0.1.0 |
增强 (查看拉取请求) |
— |