Nginx 集成

编辑

版本

1.24.0 (查看全部)

兼容的 Kibana 版本

8.13.0 或更高版本

支持的 Serverless 项目类型
这是什么?

安全
可观测性

订阅级别
这是什么?

基本

支持级别
这是什么?

Elastic

Nginx 集成允许您监控 Nginx 服务器。为指标数据流启用了时间序列 索引模式

使用 Nginx 集成从您的服务器收集指标和日志。然后在 Kibana 中可视化这些数据,使用机器学习应用程序查找 HTTP 访问日志中的异常活动,创建警报以在出现问题时通知您,并在排除问题时参考数据。

例如,如果您想在特定时间段内某个数量的客户端请求失败时收到通知,您可以安装 Nginx 集成以将日志发送到 Elastic。然后,您可以在可观测性日志应用程序中实时查看流入 Elastic 的日志流。您还可以在日志应用程序中设置新的日志阈值规则,以便在特定时间段内发生超过一定数量的失败状态事件时发出警报。

数据流

编辑

Nginx 集成收集两种类型的数据:日志和指标。

日志 帮助您记录 Nginx 服务器中发生的事件。这包括何时发生客户端请求或错误。

指标 让您深入了解 Nginx 服务器的状态。这包括诸如按状态划分的活动客户端连接总数、客户端请求总数等信息。

要求

编辑

您需要 Elasticsearch 来存储和搜索您的数据,并需要 Kibana 来可视化和管理它。您可以使用我们在 Elastic Cloud 上的托管 Elasticsearch 服务(推荐),或者在您自己的硬件上自行管理 Elastic Stack。

每个数据源都使用特定的 Nginx 版本进行了测试。有关更多信息,请参见 日志参考指标参考

在 Windows 上,该模块使用从 Chocolatey 存储库安装的 Nginx 进行了测试。

设置

编辑

有关如何设置集成的分步说明,请参见 入门 指南。

日志参考

编辑

时区支持

此数据源解析不包含时区信息的日志。对于这些日志,Elastic Agent 读取本地时区,并在解析时使用它将时间戳转换为 UTC。用于解析的时区包含在事件的 event.timezone 字段中。

要禁用此转换,可以使用 drop_fields 处理器删除 event.timezone 字段。

如果日志来自时区与本地时区不同的系统或应用程序,可以使用 add_fields 处理器使用原始时区覆盖 event.timezone 字段。

访问日志
编辑

访问日志收集 Nginx 访问日志。

测试版本
编辑

Nginx 访问日志流已使用 Nginx 1.19.5 进行了测试。

示例

access 的示例事件如下所示

{
    "@timestamp": "2022-12-09T10:39:23.000Z",
    "_tmp": {},
    "agent": {
        "ephemeral_id": "34369a4a-4f24-4a39-9758-85fc2429d7e2",
        "id": "ef5e274d-4b53-45e6-943a-a5bcf1a6f523",
        "name": "docker-fleet-agent",
        "type": "filebeat",
        "version": "8.5.0"
    },
    "data_stream": {
        "dataset": "nginx.access",
        "namespace": "ep",
        "type": "logs"
    },
    "ecs": {
        "version": "8.11.0"
    },
    "elastic_agent": {
        "id": "ef5e274d-4b53-45e6-943a-a5bcf1a6f523",
        "snapshot": false,
        "version": "8.5.0"
    },
    "event": {
        "agent_id_status": "verified",
        "category": [
            "web"
        ],
        "created": "2022-12-09T10:39:38.896Z",
        "dataset": "nginx.access",
        "ingested": "2022-12-09T10:39:40Z",
        "kind": "event",
        "outcome": "success",
        "timezone": "+00:00",
        "type": [
            "access"
        ]
    },
    "host": {
        "architecture": "x86_64",
        "containerized": false,
        "hostname": "docker-fleet-agent",
        "id": "66392b0697b84641af8006d87aeb89f1",
        "ip": [
            "172.18.0.7"
        ],
        "mac": [
            "02-42-AC-12-00-07"
        ],
        "name": "docker-fleet-agent",
        "os": {
            "codename": "focal",
            "family": "debian",
            "kernel": "5.15.49-linuxkit",
            "name": "Ubuntu",
            "platform": "ubuntu",
            "type": "linux",
            "version": "20.04.5 LTS (Focal Fossa)"
        }
    },
    "http": {
        "request": {
            "method": "GET"
        },
        "response": {
            "body": {
                "bytes": 97
            },
            "status_code": 200
        },
        "version": "1.1"
    },
    "input": {
        "type": "log"
    },
    "log": {
        "file": {
            "path": "/tmp/service_logs/access.log"
        },
        "offset": 0
    },
    "nginx": {
        "access": {
            "remote_ip_list": [
                "127.0.0.1"
            ]
        }
    },
    "related": {
        "ip": [
            "127.0.0.1"
        ]
    },
    "source": {
        "address": "127.0.0.1",
        "ip": "127.0.0.1"
    },
    "tags": [
        "nginx-access"
    ],
    "url": {
        "original": "/server-status",
        "path": "/server-status"
    },
    "user_agent": {
        "device": {
            "name": "Other"
        },
        "name": "curl",
        "original": "curl/7.64.0",
        "version": "7.64.0"
    }
}

ECS 字段参考

有关 ECS 字段的详细信息,请参阅以下文档

导出的字段
字段 描述 类型

@timestamp

事件时间戳。

日期

cloud.image.id

云实例的镜像 ID。

关键字

data_stream.dataset

数据流数据集。

constant_keyword

data_stream.namespace

数据流命名空间。

constant_keyword

data_stream.type

数据流类型。

constant_keyword

event.dataset

事件数据集

constant_keyword

event.module

事件模块

constant_keyword

host.containerized

如果主机是容器。

布尔值

host.os.build

操作系统构建信息。

关键字

host.os.codename

操作系统代号(如果有)。

关键字

input.type

输入类型

关键字

log.offset

日志偏移量

长整型

nginx.access.remote_ip_list

远程 IP 地址的数组。这是一个列表,因为它通常包含客户端 IP 地址以及来自 X-Forwarded-For 等标头的 IP 地址。实际源 IP 将还原为 source.ip

关键字

错误日志
编辑

错误日志收集 Nginx 错误日志。

测试版本
编辑

Nginx 错误日志流已使用 Nginx 1.19.5 进行了测试。

示例

error 的示例事件如下所示

{
    "@timestamp": "2022-12-09T10:40:03.000Z",
    "agent": {
        "ephemeral_id": "34369a4a-4f24-4a39-9758-85fc2429d7e2",
        "id": "ef5e274d-4b53-45e6-943a-a5bcf1a6f523",
        "name": "docker-fleet-agent",
        "type": "filebeat",
        "version": "8.5.0"
    },
    "data_stream": {
        "dataset": "nginx.error",
        "namespace": "ep",
        "type": "logs"
    },
    "ecs": {
        "version": "8.11.0"
    },
    "elastic_agent": {
        "id": "ef5e274d-4b53-45e6-943a-a5bcf1a6f523",
        "snapshot": false,
        "version": "8.5.0"
    },
    "event": {
        "agent_id_status": "verified",
        "category": [
            "web"
        ],
        "created": "2022-12-09T10:40:18.973Z",
        "dataset": "nginx.error",
        "ingested": "2022-12-09T10:40:24Z",
        "kind": "event",
        "timezone": "+00:00",
        "type": [
            "error"
        ]
    },
    "host": {
        "architecture": "x86_64",
        "containerized": false,
        "hostname": "docker-fleet-agent",
        "id": "66392b0697b84641af8006d87aeb89f1",
        "ip": [
            "172.18.0.7"
        ],
        "mac": [
            "02-42-AC-12-00-07"
        ],
        "name": "docker-fleet-agent",
        "os": {
            "codename": "focal",
            "family": "debian",
            "kernel": "5.15.49-linuxkit",
            "name": "Ubuntu",
            "platform": "ubuntu",
            "type": "linux",
            "version": "20.04.5 LTS (Focal Fossa)"
        }
    },
    "input": {
        "type": "log"
    },
    "log": {
        "file": {
            "path": "/tmp/service_logs/error.log"
        },
        "level": "warn",
        "offset": 0
    },
    "message": "conflicting server name \"localhost\" on 0.0.0.0:80, ignored",
    "nginx": {
        "error": {}
    },
    "process": {
        "pid": 1,
        "thread": {
            "id": 1
        }
    },
    "tags": [
        "nginx-error"
    ]
}

ECS 字段参考

有关 ECS 字段的详细信息,请参阅以下文档

导出的字段
字段 描述 类型

@timestamp

事件时间戳。

日期

cloud.image.id

云实例的镜像 ID。

关键字

data_stream.dataset

数据流数据集。

constant_keyword

data_stream.namespace

数据流命名空间。

constant_keyword

data_stream.type

数据流类型。

constant_keyword

event.dataset

事件数据集

constant_keyword

event.module

事件模块

constant_keyword

host.containerized

如果主机是容器。

布尔值

host.os.build

操作系统构建信息。

关键字

host.os.codename

操作系统代号(如果有)。

关键字

input.type

输入类型

关键字

log.offset

日志偏移量

长整型

nginx.error.connection_id

连接标识符。

长整型

指标参考

编辑
Stub 状态指标
编辑

Nginx stubstatus 流从 Nginx ngx_http_stub_status 模块收集数据。它从 ngx_http_stub_status 生成的网页中抓取服务器状态数据。请验证您的 Nginx 发行版是否带有提到的模块,并且该模块在 Nginx 配置文件中已启用。

location /nginx_status {
    stub_status;
    allow 127.0.0.1; # only allow requests from localhost
    deny all;        # deny all other hosts
}

127.0.0.1 替换为您的服务器 IP 地址,并确保只有您可以访问此页面。

测试版本
编辑

Nginx stubstatus 流已使用 Nginx 1.19.5 进行了测试,并且预计适用于所有版本 >= 1.19。

示例

stubstatus 的示例事件如下所示

{
    "@timestamp": "2024-02-08T08:12:10.668Z",
    "agent": {
        "ephemeral_id": "c3d516ba-b659-4190-a29d-d28200d74d48",
        "id": "2ea50bee-9250-43d1-8d70-949f242aa275",
        "name": "docker-fleet-agent",
        "type": "metricbeat",
        "version": "8.10.1"
    },
    "data_stream": {
        "dataset": "nginx.stubstatus",
        "namespace": "ep",
        "type": "metrics"
    },
    "ecs": {
        "version": "8.11.0"
    },
    "elastic_agent": {
        "id": "2ea50bee-9250-43d1-8d70-949f242aa275",
        "snapshot": false,
        "version": "8.10.1"
    },
    "event": {
        "agent_id_status": "verified",
        "dataset": "nginx.stubstatus",
        "duration": 1156104,
        "ingested": "2024-02-08T08:12:13Z",
        "module": "nginx"
    },
    "host": {
        "architecture": "x86_64",
        "containerized": false,
        "hostname": "docker-fleet-agent",
        "id": "28da52b32df94b50aff67dfb8f1be3d6",
        "ip": [
            "172.24.0.7"
        ],
        "mac": [
            "02-42-AC-18-00-07"
        ],
        "name": "docker-fleet-agent",
        "os": {
            "codename": "focal",
            "family": "debian",
            "kernel": "5.15.0-89-generic",
            "name": "Ubuntu",
            "platform": "ubuntu",
            "type": "linux",
            "version": "20.04.6 LTS (Focal Fossa)"
        }
    },
    "metricset": {
        "name": "stubstatus",
        "period": 10000
    },
    "nginx": {
        "stubstatus": {
            "accepts": 33,
            "active": 1,
            "current": 33,
            "dropped": 0,
            "handled": 33,
            "hostname": "elastic-package-service-nginx-1:80",
            "reading": 0,
            "requests": 33,
            "waiting": 0,
            "writing": 1
        }
    },
    "service": {
        "address": "http://elastic-package-service-nginx-1:80/server-status",
        "type": "nginx"
    },
    "tags": [
        "nginx-stubstatus"
    ]
}

ECS 字段参考

有关 ECS 字段的详细信息,请参阅以下文档

导出的字段
字段 描述 类型 指标类型

@timestamp

事件时间戳。

日期

agent.id

关键字

cloud.account.id

用于在多租户环境中标识不同实体的云帐户或组织 ID。示例:AWS 帐户 ID、Google Cloud ORG ID 或其他唯一标识符。

关键字

cloud.availability_zone

此主机运行所在的可用区。

关键字

cloud.image.id

云实例的镜像 ID。

关键字

cloud.instance.id

主机机器的实例 ID。

关键字

cloud.provider

云提供商的名称。示例值有 aws、azure、gcp 或 digitalocean。

关键字

cloud.region

此主机运行所在的区域。

关键字

container.id

唯一的容器 ID。

关键字

data_stream.dataset

数据流数据集。

constant_keyword

data_stream.namespace

数据流命名空间。

constant_keyword

data_stream.type

数据流类型。

constant_keyword

event.dataset

事件数据集

constant_keyword

event.module

事件模块

constant_keyword

host.containerized

如果主机是容器。

布尔值

host.name

主机的名称。它可以包含 Unix 系统上 hostname 返回的内容、完全限定的域名或用户指定的名称。发送方决定使用哪个值。

关键字

host.os.build

操作系统构建信息。

关键字

host.os.codename

操作系统代号(如果有)。

关键字

nginx.stubstatus.accepts

接受的客户端连接总数。

长整型

计数器

nginx.stubstatus.active

当前活动的客户端连接数,包括等待连接。

长整型

计量表

nginx.stubstatus.current

当前客户端请求数。

长整型

计量表

nginx.stubstatus.dropped

丢弃的客户端连接总数。

长整型

计数器

nginx.stubstatus.handled

处理的客户端连接总数。

长整型

计数器

nginx.stubstatus.hostname

Nginx 主机名。

关键字

nginx.stubstatus.reading

当前 Nginx 正在读取请求标头的连接数。

长整型

计量表

nginx.stubstatus.requests

客户端请求总数。

长整型

计数器

nginx.stubstatus.waiting

当前等待请求的空闲客户端连接数。

长整型

计量表

nginx.stubstatus.writing

当前 Nginx 正在将响应写回客户端的连接数。

长整型

计量表

service.address

从中收集有关此服务的数据的地址。这应该是一个 URI、网络地址(ipv4:port 或 [ipv6]:port)或资源路径(套接字)。

关键字

异常检测配置

编辑

当您拥有与 清单中指定的查询匹配的数据时,这些异常检测作业可在 Kibana 的机器学习应用程序中使用。

Nginx 访问日志
编辑

查找 HTTP 访问日志中的异常活动。

作业 描述

visitor_rate_nginx

HTTP 访问日志:检测异常的访问者率

status_code_rate_nginx

HTTP 访问日志:检测异常的状态代码率

source_ip_url_count_nginx

HTTP 访问日志:检测异常的源 IP - URL 的高唯一计数

source_ip_request_rate_nginx

HTTP 访问日志:检测异常的源 IP - 高请求率

low_request_rate_nginx

HTTP 访问日志:检测低请求率

变更日志

编辑
变更日志
版本 详细信息 Kibana 版本

1.24.0

增强 (查看拉取请求)
弃用第三方 REST API 导入选项。

8.13.0 或更高版本

1.23.0

增强 (查看拉取请求)
为 stubstatus 数据流添加处理器支持。

8.13.0 或更高版本

1.22.0

增强 (查看拉取请求)
ECS 版本更新为 8.11.0。将 kibana 约束更新为 ^8.13.0。修改了字段定义,以删除 ecs@mappings 组件模板中多余的 ECS 字段。

8.13.0 或更高版本

1.21.0

增强 (查看拉取请求)
在 data_stream.dataset 上添加全局过滤器以提高性能。

8.12.0 或更高版本

1.20.0

增强 (查看拉取请求)
为敏感字段启用密钥。有关更多详细信息,请参阅 https://elastic.ac.cn/guide/en/fleet/current/agent-policy.html#agent-policy-secret-values

8.12.0 或更高版本

1.19.1

错误修复 (查看拉取请求)
由于错误,禁用较旧堆栈版本的密钥。

8.8.0 或更高版本

1.19.0

增强 (查看拉取请求)
在 stub 状态指标中添加对标签的支持

8.8.0 或更高版本

1.18.0

增强 (查看拉取请求)
启用敏感字段的 secret,从 8.12 开始支持。

8.8.0 或更高版本

1.17.0

增强 (查看拉取请求)
将请求跟踪器日志计数限制为 5。

8.8.0 或更高版本

1.16.0

增强 (查看拉取请求)
将包 format_version 更新为 3.0.0。

8.8.0 或更高版本

1.15.1

错误修复 (查看拉取请求)
向重命名处理器添加 null 检查和 ignore_missing 检查

8.8.0 或更高版本

1.15.0

增强 (查看拉取请求)
为指标数据集启用时间序列数据流。这提高了存储使用率和查询性能。有关更多详细信息,请参阅 https://elastic.ac.cn/guide/en/elasticsearch/reference/current/tsds.html

8.8.0 或更高版本

1.14.1-beta

Bug 修复 (查看拉取请求)
添加 beta 标志

1.14.0

增强 (查看拉取请求)
将所有权从 obs-service-integrations 重命名为 obs-infraobs-integrations

8.8.0 或更高版本

1.13.0-beta

增强 (查看拉取请求)
添加一个新标志以启用请求跟踪

1.12.0-beta

增强 (查看拉取请求)
在 Nginx 上启用 TSDB 以进行 Beta 测试。

1.11.1

Bug 修复 (查看拉取请求)
修改了维度字段映射以支持公共云部署。

8.5.0 或更高版本

1.11.0

增强 (查看拉取请求)
将“访问和错误日志”仪表板可视化迁移到 Lens。

8.5.0 或更高版本

1.10.0

增强 (查看拉取请求)
将“日志概述”仪表板可视化迁移到 Lens。

8.5.0 或更高版本

1.9.0

增强 (查看拉取请求)
将“指标概述”仪表板可视化迁移到 Lens。

8.5.0 或更高版本

1.8.0

增强 (查看拉取请求)
添加了支持 TSDB 启用的更改。

8.0.0 或更高版本

1.7.1

增强 (查看拉取请求)
添加了类别和/或子类别。

8.0.0 或更高版本

1.7.0

增强 (查看拉取请求)
将 ECS 版本更新到 8.5.1。

8.0.0 或更高版本

1.6.0

增强 (查看拉取请求)
添加了基础设施类别。

8.0.0 或更高版本

1.5.1

增强 (查看拉取请求)
删除未使用的可视化

8.0.0 或更高版本

1.5.0

增强 (查看拉取请求)
为日志数据流添加 ignore_older

8.0.0 或更高版本

1.4.1

增强 (查看拉取请求)
更新文档,为新用户提供更多上下文。

8.0.0 或更高版本

1.4.0

增强 (查看拉取请求)
将仪表板中的平铺地图迁移到地图对象

1.3.2

增强 (查看拉取请求)
为多字段添加文档

1.3.1

增强 (查看拉取请求)
将 ML 模块添加到自述文件

7.14.0 或更高版本
8.0.0 或更高版本

1.3.0

增强 (查看拉取请求)
更新到 ECS 8.0

1.2.3

Bug 修复 (查看拉取请求)
使用新的 GeoIP 数据库重新生成测试文件

1.2.2

Bug 修复 (查看拉取请求)
将测试公共 IP 更改为受支持的子集

1.2.1

Bug 修复 (查看拉取请求)
修复 ML 模块清单查询以忽略冻结层和冷层

7.14.0 或更高版本
8.0.0 或更高版本

1.2.0

增强 (查看拉取请求)
发布 v8.0.0 的 Nginx 包

7.14.0 或更高版本
8.0.0 或更高版本

1.1.2

增强 (查看拉取请求)
与指南统一

1.1.1

Bug 修复 (查看拉取请求)
修复检查 _forwarded_ 标签的逻辑

1.1.0

增强 (查看拉取请求)
更新到 ECS 1.12.0

7.14.0 或更高版本

1.0.0

增强 (查看拉取请求)
将 Nginx 作为 GA 发布

0.8.2

增强 (查看拉取请求)
转换为生成的 ECS 字段

0.8.1

增强 (查看拉取请求)
更新到 ECS 1.11.0

0.8.0

增强 (查看拉取请求)
更新集成描述

0.7.0

增强 (查看拉取请求)
设置“event.module”和“event.dataset”

0.6.2

增强 (查看拉取请求)
添加对 Splunk 授权令牌的支持

0.6.1

Bug 修复 (查看拉取请求)
修复第三方 REST API 摄取管道中的错误

0.6.0

增强 (查看拉取请求)
更新到 ECS 1.10.0 并添加 event.original 选项

0.5.0

增强 (查看拉取请求)
添加 ML 作业以查找 HTTP 访问日志中的异常活动

0.4.1

增强 (查看拉取请求)
更新到 ECS 1.9.0

0.3.11

增强 (查看拉取请求)
更新软件包所有者

0.3.10

增强 (查看拉取请求)
修复与 Kibana 的兼容性

0.1.0

增强 (查看拉取请求)
初始版本