在Droplets上配置Logstash,将Nginx日志转发到托管OpenSearch

简介

跟踪网页服务器日志对于您的网站运行顺畅、解决问题以及了解用户行为至关重要。如果您正在使用Nginx,它会生成充满宝贵信息的访问和错误日志。为了管理和分析这些日志,您可以使用Logstash来处理和转发日志,以及DigitalOcean的托管OpenSearch来索引和可视化数据。

在这篇教程中,我们将指导您在Droplet上安装Logstash,设置它来收集您的Nginx日志,并将它们发送到DigitalOcean托管OpenSearch

先决条件

用例

如果你想要:

  • 监控和故障排除:通过分析实时日志来跟踪Web服务器的性能和错误。
  • 分析性能:了解Web流量模式和服务器指标。
  • 集中日志:将多个Nginx服务器的日志聚合到一个OpenSearch实例中,以便更容易管理。

注意:设置时间应该大约是30分钟。

步骤1 – 在Droplets上安装Logstash

Logstash可以通过这里提供的二进制文件安装,或者使用为您的操作系统定制的软件包仓库。为了更方便地管理和更新,通常建议使用软件包仓库。您可以在基于Debian的系统,如Ubuntu上使用APT包管理器,而在基于Red Hat的系统,如CentOS或RHEL上,可以使用yum。这两种方法都确保Logstash能够正确地集成到您的系统的包管理基础设施中,简化了安装和维护。

在本节中,我们将向您展示如何使用 both aptyum 包管理器来安装Logstash,确保您可以在任何Linux发行版的Droplet上配置Logstash。

要查找操作系统,请运行以下命令:

cat /etc/os-release

对于基于APT的系统(Ubuntu/Debian)

1.下载并安装公共签名密钥:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic-keyring.gpg

2.如果尚未安装,请安装apt-transport-https:

sudo apt-get install apt-transport-https

3.将Logstash仓库定义添加到您的apt源列表并保存:

echo "deb [signed-by=/usr/share/keyrings/elastic-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.list

注意:确保不要使用add-apt-repository命令,因为它可能会添加一个不支持的deb-src条目。如果您遇到与deb-src条目相关的错误,请将其从/etc/apt/sources.list文件中删除。如果您已经添加了deb-src条目,您将看到如下错误:

Unable to find expected entry 'main/source/Sources' in Release file (Wrong sources.list entry or malformed file)

如果您只是从/etc/apt/sources.list文件中删除了deb-src条目,安装应该如预期般工作。

4.更新包索引以包括新仓库:

sudo apt-get update

5.使用apt包管理器安装Logstash:

sudo apt-get install logstash

6.启动Logstash并使其在系统启动时自动启动:

sudo systemctl start logstash
sudo systemctl enable logstash

Logstash现在已安装并在您的系统上运行。

对于基于YUM的系统(CentOS/RHEL):

1.下载并安装Logstash仓库的公钥:

sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

2.在/etc/yum.repos.d/为Logstash创建一个仓库文件。例如,创建一个名为logstash.repo的文件。您可以复制并粘贴下面的内容来创建文件并更新内容:

sudo tee /etc/yum.repos.d/logstash.repo > /dev/null <<EOF
[logstash-8.x]
name=Elastic repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF

仓库现已准备好使用。

3.使用YUM包管理器安装Logstash:

sudo yum install logstash

4.启动Logstash并使其在系统启动时自动启动:

sudo systemctl start logstash
sudo systemctl enable logstash

Logstash 已经安装并在您的系统上运行。

第2步 – 安装 Open Search 输出插件

您可以运行以下命令来安装 OpenSearch 输出插件:

/usr/share/logstash/bin/logstash-plugin install logstash-output-opensearch

您可以在 logstash-output-opensearch 插件仓库 上找到更多关于该插件的信息。

第3步 – 配置 Logstash 将 Nginx 日志发送到 OpenSearch

Logstash 管道由三个主要阶段组成:输入、过滤和输出。Logstash 管道使用插件。您可以使用社区插件或创建您自己的插件。

  • 输入: 这个阶段从各种来源收集数据。Logstash 支持许多输入插件来处理诸如日志文件、数据库、消息队列和云服务之类的数据源。
  • 过滤: 这个阶段处理和转换输入阶段收集的数据。过滤器可以修改、丰富和结构化数据,使其更有用且更容易分析。
  • 输出:此阶段将处理后的数据发送到目的地。目的地可以是数据库、文件和如OpenSearch的数据存储。

现在让我们创建一个流水线。

1.在/etc/logstash/conf.d/nginx-to-opensearch.conf创建一个Logstash配置文件,内容如下:

input {
  file {
    path => "/var/log/nginx/access.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => ["nginx_access"]
  }
  file {
    path => "/var/log/nginx/error.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => ["nginx_error"]
  }
}
filter {
  if "nginx_access" in [tags] {
    grok {
      match => { "message" => "%{IPORHOST:client_ip} - %{USER:ident} \[%{HTTPDATE:timestamp}\] \"%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:http_version}\" %{NUMBER:response} %{NUMBER:bytes} \"%{DATA:referrer}\" \"%{DATA:user_agent}\"" }
    }
    mutate {
      remove_field => ["message", "[log][file][path]", "[event][original]"]
    }
  } else if "nginx_error" in [tags] {
    grok {
      match => { "message" => "\[%{TIMESTAMP_ISO8601:timestamp}\] \[%{LOGLEVEL:level}\] \[%{DATA:pid}\] \[%{DATA:tid}\] %{GREEDYDATA:error_message}" }
    }
    mutate {
      remove_field => ["message", "[log][file][path]", "[event][original]"]
    }
  }
}
output {
  if "nginx_access" in [tags] {
    opensearch {
      hosts => ["https://<OpenSearch-Hostname>:25060"]
      user => "doadmin"
      password => "<your_password>"
      index => "nginx_access-%{+YYYY.MM.dd}"
      ssl => true
      ssl_certificate_verification => true
    }
  } else if "nginx_error" in [tags] {
    opensearch {
      hosts => ["https://<OpenSearch-Hostname>:25060"]
      user => "doadmin"
      password => "<your_password>"
      index => "nginx_error-%{+YYYY.MM.dd}"
      ssl => true
      ssl_certificate_verification => true
    }
  }
}

替换:

  • OpenSearch-Hostname为你OpenSearch服务器的主机名。
  • <your_password>为你OpenSearch的密码。

2.通过重启Logstash应用新的配置:

sudo systemctl restart logstash

3.检查Logstash日志,确保它正确地处理和转发数据:

sudo tail -f /var/log/logstash/logstash-plain.log

以下是nginx-to-opensearch.conf配置的详细解析

输入

输入块配置了两个文件输入,以读取日志:

Nginx日志
路径
/var/log/nginx/access.log(用于访问日志)
/var/log/nginx/error.log(用于错误日志)
起始位置beginning – 从日志文件的开始处读取。
Sincedb路径/dev/null – 禁用连续读取的跟踪。
标签
["nginx_access"]用于访问日志
["nginx_error"]用于错误日志

注意:确保Logstash服务可以访问输入路径。

过滤器

过滤块根据它们的标签处理日志:

日志处理访问日志:使用grok过滤器解析访问日志格式,提取字段如client_iptimestampmethodrequesthttp_versionresponsebytesreferreruser_agent。删除原始message和某些元数据字段。

错误日志:检查nginx_error标签并应用grok过滤器提取字段,如timestamplevelpidtiderror_message。还删除message和元数据字段。

输出

输出块根据它们的标签将事件路由到OpenSearch:

路由到OpenSearch:对于访问和错误日志,它指定:主机:OpenSearch实例的URL。用户doadmin用于身份验证。密码:您的OpenSearch密码。索引:对于访问日志是nginx_access-%{+YYYY.MM.dd},对于错误日志是nginx_error-%{+YYYY.MM.dd}SSL设置:启用SSL和证书验证。

步骤4 – 配置OpenSearch

1.打开您的网络浏览器,访问OpenSearch控制台网址:

https://<OpenSearch-Hostname>

OpenSearch-Hostname替换为您的OpenSearch服务器的域名。

2.创建一个索引模式。
a. 在左侧菜单栏,导航到管理 > 控制台管理 > 索引模式
b. 点击顶部右侧的创建索引模式
c. 输入nginx_access-*nginx_error-*作为索引模式,以匹配Logstash创建的所有索引,然后点击下一步
d. 点击创建索引模式

3.确保索引模式已成功创建,并且在索引模式列表中可见。

4.在左侧菜单栏,转到发现并选择您创建的索引模式(nginx_access-*nginx_error-*)。确认日志条目可见且正确索引。

5.创建可视化和控制台。详情请访问如何在OpenSearch中创建控制台

故障排除

检查连通性

您可以通过测试连通性来验证Logstash是否能够连接到OpenSearch:

curl -u doadmin:your_password -X GET "https://<OpenSearch-Hostname>:25060/_cat/indices?v"

OpenSearch-Hostname替换为您的OpenSearch服务器的主机名。

  • <your_password>替换为您自己的OpenSearch密码。

数据摄入

您可以通过以下curl命令确保数据在OpenSearch中正确索引:

curl -u doadmin:your_password -X GET "http://<OpenSearch-Hostname>:25060/nginx-logs-*/_search?pretty"

OpenSearch-Hostname替换为您的OpenSearch服务器的主机名。

  • <your_password>替换为您自己的OpenSearch密码。

防火墙和网络配置

确保防火墙规则和网络设置允许Logstash和OpenSearch之间的25060端口通信。

结论

在本指南中,您学会了如何配置Logstash以收集并转发Nginx日志到OpenSearch。

您回顾了如何根据您的Linux发行版使用`apt`或`yum`包管理器来在您的Droplet上启动Logstash。您还创建并调整了Logstash配置文件,以确保Nginx日志被正确解析并发送到OpenSearch。之后,您在OpenSearch Dashboards中设置了一个索引模式,以检查日志是否被正确索引并可供分析。完成这些步骤后,您应该现在拥有一个工作设置,其中Logstash收集Nginx日志并发送到OpenSearch。这个设置允许您使用OpenSearch的强大搜索和可视化工具来分析您的服务器日志。

如果您遇到任何问题,请查看我们提供的故障排除技巧,并参考LogstashOpenSearch文档以获得更多帮助。定期监控将使您的日志系统运行顺畅且有效。

Source:
https://www.digitalocean.com/community/tutorials/forward-nginx-logs-to-opensearch-using-logstash