Nginx Ingress Controller 集成
编辑Nginx Ingress Controller 集成
编辑此集成定期从 Nginx Ingress Controller 实例中获取日志。它可以解析入口创建的访问日志和错误日志。
兼容性
编辑该集成已使用 Nginx Ingress Controller v0.30.0 和 v0.40.2 进行测试。日志格式在此处描述 此处。
日志
编辑访问日志
编辑access
数据流收集 Nginx Ingress Controller 访问日志。
示例
一个 access
的示例事件如下所示
{ "@timestamp": "2020-02-07T11:48:51.000Z", "agent": { "ephemeral_id": "e54e6f78-d64d-4f55-ae90-25511c38de57", "id": "9878d192-22ad-49b6-a6c2-9959b0815d04", "name": "docker-fleet-agent", "type": "filebeat", "version": "8.0.0-beta1" }, "data_stream": { "dataset": "nginx_ingress_controller.access", "namespace": "ep", "type": "logs" }, "ecs": { "version": "8.0.0" }, "elastic_agent": { "id": "9878d192-22ad-49b6-a6c2-9959b0815d04", "snapshot": false, "version": "8.0.0-beta1" }, "event": { "agent_id_status": "verified", "category": [ "web" ], "created": "2022-01-12T03:28:00.188Z", "dataset": "nginx_ingress_controller.access", "ingested": "2022-01-12T03:28:06Z", "kind": "event", "outcome": "success", "timezone": "+00:00", "type": [ "info" ] }, "host": { "architecture": "x86_64", "containerized": true, "hostname": "docker-fleet-agent", "id": "4ccba669f0df47fa3f57a9e4169ae7f1", "ip": [ "172.18.0.4" ], "mac": [ "02:42:ac:12:00:04" ], "name": "docker-fleet-agent", "os": { "codename": "Core", "family": "redhat", "kernel": "5.11.0-44-generic", "name": "CentOS Linux", "platform": "centos", "type": "linux", "version": "7 (Core)" } }, "http": { "request": { "method": "POST" }, "response": { "body": { "bytes": 59 }, "status_code": 200 }, "version": "1.1" }, "input": { "type": "log" }, "log": { "file": { "path": "/tmp/service_logs/ingress.log" }, "offset": 0 }, "nginx_ingress_controller": { "access": { "http": { "request": { "id": "529a007902362a5f51385a5fa7049884", "length": 89, "time": 0.001 } }, "remote_ip_list": [ "192.168.64.1" ], "upstream": { "alternative_name": "", "ip": "172.17.0.5", "name": "default-web-8080", "port": 8080, "response": { "length": 59, "status_code": 200, "time": 0 } } } }, "related": { "ip": [ "192.168.64.1" ] }, "source": { "address": "192.168.64.1", "ip": "192.168.64.1" }, "tags": [ "nginx-ingress-controller-access" ], "url": { "original": "/products" }, "user_agent": { "device": { "name": "Other" }, "name": "curl", "original": "curl/7.54.0", "version": "7.54.0" } }
导出的字段
字段 | 描述 | 类型 |
---|---|---|
@timestamp |
事件时间戳。 |
date |
cloud.account.id |
用于在多租户环境中识别不同实体的云帐户或组织 ID。示例:AWS 帐户 ID、Google Cloud ORG ID 或其他唯一标识符。 |
keyword |
cloud.availability_zone |
此主机运行所在的可用区。 |
keyword |
cloud.image.id |
云实例的镜像 ID。 |
keyword |
cloud.instance.id |
主机机器的实例 ID。 |
keyword |
cloud.instance.name |
主机机器的实例名称。 |
keyword |
cloud.machine.type |
主机机器的机器类型。 |
keyword |
cloud.project.id |
Google Cloud 中项目的名称。 |
keyword |
cloud.provider |
云提供商的名称。示例值有 aws、azure、gcp 或 digitalocean。 |
keyword |
cloud.region |
此主机运行所在的区域。 |
keyword |
container.id |
唯一的容器 ID。 |
keyword |
container.image.name |
构建容器所基于的镜像的名称。 |
keyword |
container.labels |
镜像标签。 |
object |
container.name |
容器名称。 |
keyword |
data_stream.dataset |
数据流数据集。 |
constant_keyword |
data_stream.namespace |
数据流命名空间。 |
constant_keyword |
data_stream.type |
数据流类型。 |
constant_keyword |
ecs.version |
此事件符合的 ECS 版本。 |
keyword |
event.created |
event.created 包含代理或管道首次读取事件的日期/时间。此字段与 @timestamp 不同,因为 @timestamp 通常包含从原始事件中提取的时间。在大多数情况下,这两个时间戳会略有不同。可以使用差异来计算源生成事件与代理首次处理事件之间的时间延迟。这可以用于监视代理或管道跟上事件源的能力。如果两个时间戳相同,则应使用 @timestamp。 |
date |
event.dataset |
事件数据集 |
constant_keyword |
event.module |
事件模块 |
constant_keyword |
host.architecture |
操作系统架构。 |
keyword |
host.containerized |
如果主机是容器。 |
boolean |
host.domain |
主机所属的域的名称。例如,在 Windows 上,这可能是主机的 Active Directory 域或 NetBIOS 域名。对于 Linux,这可能是主机 LDAP 提供程序的域。 |
keyword |
host.hostname |
主机的 hostname。它通常包含主机机器上 |
keyword |
host.id |
唯一的主机 ID。由于主机名并不总是唯一的,请使用在您的环境中具有意义的值。示例:当前使用 |
keyword |
host.ip |
主机 IP 地址。 |
ip |
host.mac |
主机 MAC 地址。 |
keyword |
host.name |
主机的名称。它可以包含 Unix 系统上 |
keyword |
host.os.build |
操作系统构建信息。 |
keyword |
host.os.codename |
操作系统代号(如果有)。 |
keyword |
host.os.family |
操作系统系列(例如 redhat、debian、freebsd、windows)。 |
keyword |
host.os.kernel |
操作系统内核版本(作为原始字符串)。 |
keyword |
host.os.name |
操作系统名称,不带版本。 |
keyword |
host.os.name.text |
|
text |
host.os.platform |
操作系统平台(例如 centos、ubuntu、windows)。 |
keyword |
host.os.version |
操作系统版本(作为原始字符串)。 |
keyword |
host.type |
主机类型。对于云提供商,这可以是机器类型,如 |
keyword |
http.request.bytes |
请求的总大小(以字节为单位)(包括正文和标头)。 |
long |
http.request.id |
每个 HTTP 请求的唯一标识符,用于关联客户端和服务器之间事务中的日志。该 ID 可能包含在非标准的 HTTP 标头中,例如 |
keyword |
http.request.method |
HTTP 请求方法。该值应保留其原始事件中的大小写。例如, |
keyword |
http.request.referrer |
此 HTTP 请求的引用者。 |
keyword |
http.response.body.bytes |
响应正文的大小(以字节为单位)。 |
long |
http.response.status_code |
HTTP 响应状态代码。 |
long |
http.version |
HTTP 版本。 |
keyword |
input.type |
输入类型 |
keyword |
log.file.device_id |
包含文件所在文件系统的设备的 ID。 |
keyword |
log.file.fingerprint |
启用指纹识别时,文件的 sha256 指纹标识。 |
keyword |
log.file.idxhi |
与文件关联的唯一标识符的高位部分。(仅限 Windows) |
keyword |
log.file.idxlo |
与文件关联的唯一标识符的低位部分。(仅限 Windows) |
keyword |
log.file.inode |
日志文件的 Inode 号。 |
keyword |
log.file.path |
此事件来自的日志文件的完整路径,包括文件名。它应包括驱动器盘符(如果适用)。如果事件不是从日志文件中读取的,则不要填充此字段。 |
keyword |
log.file.vol |
包含文件的卷的序列号。(仅限 Windows) |
keyword |
log.offset |
日志偏移量 |
long |
nginx_ingress_controller.access.http.request.id |
请求的随机生成的 ID |
text |
nginx_ingress_controller.access.http.request.length |
请求长度(包括请求行、标头和请求正文) |
long |
nginx_ingress_controller.access.http.request.time |
自从从客户端读取第一个字节以来经过的时间 |
double |
nginx_ingress_controller.access.remote_ip_list |
远程 IP 地址数组。它是一个列表,因为除了客户端 IP 地址之外,还包括来自 |
keyword |
nginx_ingress_controller.access.upstream.alternative_name |
备用上游的名称。 |
text |
nginx_ingress_controller.access.upstream.ip |
上游服务器的 IP 地址。如果在请求处理期间联系了多个服务器,则它们的地址用逗号分隔。 |
ip |
nginx_ingress_controller.access.upstream.name |
上游的名称。 |
keyword |
nginx_ingress_controller.access.upstream.port |
上游服务器的端口。 |
long |
nginx_ingress_controller.access.upstream.response.length |
从上游服务器获得的响应的长度 |
long |
nginx_ingress_controller.access.upstream.response.length_list |
上游响应长度数组。它是一个列表,因为在请求处理期间联系了多个上游服务器是很常见的。 |
keyword |
nginx_ingress_controller.access.upstream.response.status_code |
从上游服务器获得的响应的状态代码 |
long |
nginx_ingress_controller.access.upstream.response.status_code_list |
上游响应状态代码数组。它是一个列表,因为在请求处理期间联系了多个上游服务器是很常见的。 |
keyword |
nginx_ingress_controller.access.upstream.response.time |
接收来自上游服务器的响应所花费的时间(以秒为单位,精度为毫秒) |
double |
nginx_ingress_controller.access.upstream.response.time_list |
上游响应持续时间数组。它是一个列表,因为在请求处理期间联系了多个上游服务器是很常见的。 |
keyword |
nginx_ingress_controller.access.upstream_address_list |
上游地址数组。它是一个列表,因为在请求处理期间联系了多个上游服务器是很常见的。 |
keyword |
related.ip |
在您的事件中看到的所有 IP。 |
ip |
related.user |
在事件中看到的所有用户名或其他用户标识符。 |
keyword |
source.address |
某些事件源地址的定义不明确。事件有时会列出 IP、域或 Unix 套接字。您应始终将原始地址存储在 |
keyword |
source.as.number |
分配给自治系统的唯一编号。自治系统号 (ASN) 唯一标识 Internet 上的每个网络。 |
long |
source.as.organization.name |
组织名称。 |
keyword |
source.as.organization.name.text |
|
match_only_text |
source.geo.city_name |
城市名称。 |
keyword |
source.geo.continent_name |
洲的名称。 |
keyword |
source.geo.country_iso_code |
国家 ISO 代码。 |
keyword |
source.geo.country_name |
国家名称。 |
keyword |
source.geo.location |
经度和纬度。 |
geo_point |
source.geo.region_iso_code |
区域 ISO 代码。 |
keyword |
source.geo.region_name |
区域名称。 |
keyword |
source.ip |
源的 IP 地址(IPv4 或 IPv6)。 |
ip |
tags |
用于标记每个事件的关键字列表。 |
keyword |
url.domain |
URL 的域名,例如“https://elastic.ac.cn[www.elastic.co]”。 在某些情况下,URL 可能直接引用 IP 和/或端口,而不使用域名。在这种情况下,IP 地址将进入 |
keyword |
url.extension |
该字段包含原始请求 URL 中的文件扩展名,不包括前导点。 仅当文件扩展名存在时才会设置,因为并非每个 URL 都有文件扩展名。不得包含前导句点。例如,该值必须为 "png",而不是 ".png"。请注意,当文件名具有多个扩展名 (example.tar.gz) 时,仅应捕获最后一个扩展名 (“gz”,而不是 “tar.gz”)。 |
keyword |
url.full |
如果完整的 URL 对您的用例很重要,则应将其存储在 |
wildcard |
url.full.text |
|
match_only_text |
url.original |
事件源中看到的未修改的原始 URL。 请注意,在网络监控中,观察到的 URL 可能是完整的 URL,而在访问日志中,URL 通常仅表示为路径。 此字段旨在表示观察到的 URL,无论完整与否。 |
wildcard |
url.original.text |
|
match_only_text |
url.path |
请求的路径,例如 "/search"。 |
wildcard |
url.query |
query 字段描述请求的查询字符串,例如 “q=elasticsearch”。 |
keyword |
url.scheme |
请求的方案,例如 “https”。注意: |
keyword |
user.name |
用户的简称或登录名。 |
keyword |
user.name.text |
|
match_only_text |
user_agent.device.name |
设备的名称。 |
keyword |
user_agent.name |
用户代理的名称。 |
keyword |
user_agent.original |
未解析的 user_agent 字符串。 |
keyword |
user_agent.original.text |
|
match_only_text |
user_agent.os.full |
操作系统名称,包括版本或代码名称。 |
keyword |
user_agent.os.full.text |
|
match_only_text |
user_agent.os.name |
操作系统名称,不带版本。 |
keyword |
user_agent.os.name.text |
|
match_only_text |
user_agent.os.version |
操作系统版本(作为原始字符串)。 |
keyword |
user_agent.version |
用户代理的版本。 |
keyword |
错误日志
编辑error
数据流收集 Nginx Ingress Controller 错误日志。
示例
一个 error
的示例事件如下
{ "@timestamp": "2022-01-12T03:31:51.309672Z", "agent": { "ephemeral_id": "fb7ef32a-6061-4dfa-a2c0-d885b7470e0d", "id": "9878d192-22ad-49b6-a6c2-9959b0815d04", "name": "docker-fleet-agent", "type": "filebeat", "version": "8.0.0-beta1" }, "data_stream": { "dataset": "nginx_ingress_controller.error", "namespace": "ep", "type": "logs" }, "ecs": { "version": "8.0.0" }, "elastic_agent": { "id": "9878d192-22ad-49b6-a6c2-9959b0815d04", "snapshot": false, "version": "8.0.0-beta1" }, "event": { "agent_id_status": "verified", "category": [ "web" ], "created": "2022-01-12T03:32:09.037Z", "dataset": "nginx_ingress_controller.error", "ingested": "2022-01-12T03:32:10Z", "kind": "event", "timezone": "+00:00", "type": [ "info" ] }, "host": { "architecture": "x86_64", "containerized": true, "hostname": "docker-fleet-agent", "id": "4ccba669f0df47fa3f57a9e4169ae7f1", "ip": [ "172.18.0.4" ], "mac": [ "02:42:ac:12:00:04" ], "name": "docker-fleet-agent", "os": { "codename": "Core", "family": "redhat", "kernel": "5.11.0-44-generic", "name": "CentOS Linux", "platform": "centos", "type": "linux", "version": "7 (Core)" } }, "input": { "type": "log" }, "log": { "file": { "path": "/tmp/service_logs/error.log" }, "level": "W", "offset": 361 }, "message": "Neither --kubeconfig nor --master was specified. Using the inClusterConfig. This might not work.", "nginx_ingress_controller": { "error": { "source": { "file": "client_config.go", "line_number": 608 }, "thread_id": 8 } }, "tags": [ "nginx-ingress-controller-error" ] }
导出的字段
字段 | 描述 | 类型 |
---|---|---|
@timestamp |
事件时间戳。 |
date |
cloud.account.id |
用于在多租户环境中识别不同实体的云帐户或组织 ID。示例:AWS 帐户 ID、Google Cloud ORG ID 或其他唯一标识符。 |
keyword |
cloud.availability_zone |
此主机运行所在的可用区。 |
keyword |
cloud.image.id |
云实例的镜像 ID。 |
keyword |
cloud.instance.id |
主机机器的实例 ID。 |
keyword |
cloud.instance.name |
主机机器的实例名称。 |
keyword |
cloud.machine.type |
主机机器的机器类型。 |
keyword |
cloud.project.id |
Google Cloud 中项目的名称。 |
keyword |
cloud.provider |
云提供商的名称。示例值有 aws、azure、gcp 或 digitalocean。 |
keyword |
cloud.region |
此主机运行所在的区域。 |
keyword |
container.id |
唯一的容器 ID。 |
keyword |
container.image.name |
构建容器所基于的镜像的名称。 |
keyword |
container.labels |
镜像标签。 |
object |
container.name |
容器名称。 |
keyword |
data_stream.dataset |
数据流数据集。 |
constant_keyword |
data_stream.namespace |
数据流命名空间。 |
constant_keyword |
data_stream.type |
数据流类型。 |
constant_keyword |
ecs.version |
此事件符合的 ECS 版本。 |
keyword |
event.dataset |
事件数据集 |
constant_keyword |
event.module |
事件模块 |
constant_keyword |
host.architecture |
操作系统架构。 |
keyword |
host.containerized |
如果主机是容器。 |
boolean |
host.domain |
主机所属的域的名称。例如,在 Windows 上,这可能是主机的 Active Directory 域或 NetBIOS 域名。对于 Linux,这可能是主机 LDAP 提供程序的域。 |
keyword |
host.hostname |
主机的 hostname。它通常包含主机机器上 |
keyword |
host.id |
唯一的主机 ID。由于主机名并不总是唯一的,请使用在您的环境中具有意义的值。示例:当前使用 |
keyword |
host.ip |
主机 IP 地址。 |
ip |
host.mac |
主机 MAC 地址。 |
keyword |
host.name |
主机的名称。它可以包含 Unix 系统上 |
keyword |
host.os.build |
操作系统构建信息。 |
keyword |
host.os.codename |
操作系统代号(如果有)。 |
keyword |
host.os.family |
操作系统系列(例如 redhat、debian、freebsd、windows)。 |
keyword |
host.os.kernel |
操作系统内核版本(作为原始字符串)。 |
keyword |
host.os.name |
操作系统名称,不带版本。 |
keyword |
host.os.name.text |
|
text |
host.os.platform |
操作系统平台(例如 centos、ubuntu、windows)。 |
keyword |
host.os.version |
操作系统版本(作为原始字符串)。 |
keyword |
host.type |
主机类型。对于云提供商,这可以是机器类型,如 |
keyword |
input.type |
输入类型 |
keyword |
log.file.device_id |
包含文件所在文件系统的设备的 ID。 |
keyword |
log.file.fingerprint |
启用指纹识别时,文件的 sha256 指纹标识。 |
keyword |
log.file.idxhi |
与文件关联的唯一标识符的高位部分。(仅限 Windows) |
keyword |
log.file.idxlo |
与文件关联的唯一标识符的低位部分。(仅限 Windows) |
keyword |
log.file.inode |
日志文件的 Inode 号。 |
keyword |
log.file.path |
此事件来自的日志文件的完整路径,包括文件名。它应包括驱动器盘符(如果适用)。如果事件不是从日志文件中读取的,则不要填充此字段。 |
keyword |
log.file.vol |
包含文件的卷的序列号。(仅限 Windows) |
keyword |
log.flags |
日志文件的标志。 |
keyword |
log.level |
日志事件的原始日志级别。如果事件源提供日志级别或文本严重性,则此为 |
keyword |
log.offset |
日志偏移量 |
long |
message |
对于日志事件,message 字段包含日志消息,针对在日志查看器中查看进行了优化。 对于没有原始消息字段的结构化日志,可以将其他字段连接起来,形成事件的人工可读摘要。 如果存在多条消息,则可以将它们合并为一条消息。 |
match_only_text |
nginx_ingress_controller.error.source.file |
源文件 |
keyword |
nginx_ingress_controller.error.source.line_number |
源行号 |
long |
nginx_ingress_controller.error.thread_id |
线程 ID |
long |
tags |
用于标记每个事件的关键字列表。 |
keyword |
如何在本地设置和测试 Ingress Controller
编辑Ingress Controller 基于 Kubernetes Ingress 资源构建,使用 ConfigMap 存储 NGINX 配置。因此,在启动并运行 Ingress Controller 之前,需要一个 k8s 集群。文档:https://kubernetes.github.io/ingress-nginx/
- k8s.md[设置 k8s 集群]。
- 按照 https://kubernetes.ac.cn/docs/tasks/access-application-cluster/ingress-minikube/ 设置 ingress controller
- 将 pod 的日志重定向到临时文件:
kubectl -n kube-system logs -f nginx-ingress-controller-6fc5bcc8c9-zm8zv >> /tmp/ingresspod
- 配置 Beats 模块
- module: nginx # Ingress-nginx controller logs. This is disabled by default. It could be used in Kubernetes environments to parse ingress-nginx logs ingress_controller: enabled: true # Set custom paths for the log files. If left empty, # Filebeat will choose the paths depending on your OS. var.paths: ["/tmp/ingresspod"]
- 在 ES 中设置管道和仪表板
- 启动 Filebeat
- 产生流量
# visit `http://hello-world.info/v2` and `http://hello-world.info` from different browser engines # use curl and wget to access the pages with different http words ie: curl -d "param1=value1¶m2=value2" -X GET hello-world.info
使用 kind 的详细示例
编辑- 使用 https://kubernetes.github.io/ingress-nginx/deploy/ 下的
快速入门
指南,然后使用本地测试示例
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.3.1/deploy/static/provider/cloud/deploy.yaml kubectl create deployment demo --image=httpd --port=80 kubectl expose deployment demo kubectl create ingress demo-localhost --class=nginx \ --rule="demo.localdev.me/*=demo:80" kubectl port-forward --namespace=ingress-nginx service/ingress-nginx-controller 8080:80
通过访问以下网址产生流量:http://demo.localdev.me:8080/
demo.localdev.me
是 DNS 默认设置为 AWS 保留的 localhost
如果要将 ingress-nginx 配置为输出 json 格式,请在 ingress-nginx-controller
中使用以下配置
- 下载清单
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.3.1/deploy/static/provider/cloud/deploy.yaml
- 编辑 deploy.yaml
apiVersion: v1 data: allow-snippet-annotations: "true" log-format-escape-json: "true" log-format-upstream: '{"timestamp": "$time_iso8601", "requestID": "$req_id", "proxyUpstreamName": "$proxy_upstream_name", "proxyAlternativeUpstreamName": "$proxy_alternative_upstream_name","upstreamStatus": "$upstream_status", "upstreamAddr": "$upstream_addr","httpRequest":{"requestMethod": "$request_method", "requestUrl": "$host$request_uri", "status": $status,"requestSize": "$request_length", "responseSize": "$upstream_response_length", "userAgent": "$http_user_agent", "remoteIp": "$remote_addr", "referer": "$http_referer", "latency": "$upstream_response_time s", "protocol":"$server_protocol"}}' kind: ConfigMap metadata: labels: app.kubernetes.io/component: controller app.kubernetes.io/instance: ingress-nginx app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx app.kubernetes.io/version: 1.3.1 name: ingress-nginx-controller namespace: ingress-nginx
- 重新应用清单
kubectl apply -f deploy.yaml
- 检查日志
kubectl logs -n ingress-nginx ingress-nginx-controller-7bf78659d-2th2m -f {"timestamp": "2022-09-07T09:36:15+00:00", "requestID": "92eea20d4058f5ee2b33f9366141101c", "proxyUpstreamName": "default-demo-80", "proxyAlternativeUpstreamName": "","upstreamStatus": "304", "upstreamAddr": "10.244.0.8:80","httpRequest":{"requestMethod": "GET", "requestUrl": "demo.localdev.me/", "status": 304,"requestSize": "565", "responseSize": "0", "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36", "remoteIp": "127.0.0.1", "referer": "", "latency": "0.002 s", "protocol":"HTTP/1.1"}} {"timestamp": "2022-09-07T09:36:37+00:00", "requestID": "b5a49957c5b0861b7c55b069cef7248f", "proxyUpstreamName": "default-demo-80", "proxyAlternativeUpstreamName": "","upstreamStatus": "404", "upstreamAddr": "10.244.0.8:80","httpRequest":{"requestMethod": "GET", "requestUrl": "demo.localdev.me/fdsfdsfads", "status": 404,"requestSize": "464", "responseSize": "196", "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36", "remoteIp": "127.0.0.1", "referer": "", "latency": "0.001 s", "protocol":"HTTP/1.1"}}
更新日志
编辑更新日志
版本 | 详细信息 | Kibana 版本 |
---|---|---|
1.10.1 |
错误修复 (查看拉取请求) |
8.14.0 或更高版本 |
1.10.0 |
增强功能 (查看拉取请求) |
8.14.0 或更高版本 |
1.9.0 |
增强功能 (查看拉取请求) |
8.6.0 或更高版本 |
1.8.3 |
错误修复 (查看拉取请求) |
8.6.0 或更高版本 |
1.8.2 |
增强功能 (查看拉取请求) |
8.6.0 或更高版本 |
1.8.1 |
增强功能 (查看拉取请求) |
8.6.0 或更高版本 |
1.8.0 |
增强功能 (查看拉取请求) |
8.6.0 或更高版本 |
1.7.3 |
错误修复 (查看拉取请求) |
8.6.0 或更高版本 |
1.7.2 |
错误修复 (查看拉取请求) |
8.6.0 或更高版本 |
1.7.1 |
增强功能 (查看拉取请求) |
8.6.0 或更高版本 |
1.7.0 |
增强功能 (查看拉取请求) |
8.6.0 或更高版本 |
1.6.0 |
增强功能 (查看拉取请求) |
8.0.0 或更高版本 |
1.5.0 |
增强功能 (查看拉取请求) |
8.0.0 或更高版本 |
1.4.1 |
增强功能 (查看拉取请求) |
8.0.0 或更高版本 |
1.4.0 |
增强功能 (查看拉取请求) |
8.0.0 或更高版本 |
1.3.1 |
增强功能 (查看拉取请求) |
— |
1.3.0 |
增强功能 (查看拉取请求) |
— |
1.2.2 |
错误修复 (查看拉取请求) |
— |
1.2.1 |
错误修复 (查看拉取请求) |
— |
1.2.0 |
增强功能 (查看拉取请求) |
7.14.0 或更高版本 |
1.1.2 |
增强功能 (查看拉取请求) |
— |
1.1.1 |
错误修复 (查看拉取请求) |
— |
1.1.0 |
增强功能 (查看拉取请求) |
— |
1.0.0 |
增强功能 (查看拉取请求) |
7.14.0 或更高版本 |
0.3.2 |
增强功能 (查看拉取请求) |
— |
0.3.1 |
增强功能 (查看拉取请求) |
— |
0.3.0 |
增强功能 (查看拉取请求) |
— |
0.2.0 |
增强功能 (查看拉取请求) |
— |
0.1.1 |
增强功能 (查看拉取请求) |
— |
0.1.0 |
错误修复 (查看拉取请求) |
— |
0.0.3 |
增强 (查看拉取请求) |
— |
0.0.1 |
增强 (查看拉取请求) |
— |