Website Accessibility Report로 웹사이트 无障碍성 표준을 만족시키는 방법

개 introduction

웹 서버 로그를 관리하는 것은 웹사이트를 畅通하게 運営하고, 문제를 해결하고, 사용자 행동을 이해하는 데 필요하다. 如果你는 Nginx를 사용하고 있으면, 유용한 정보가 들어있는 Acces 및 Error 로그를 생성한다. 이러한 로그를 관리하고 분석하기 위해서는, Logstash를 사용하여 로그를 처리하고 转发하는 것과, DigitalOcean의 Managed OpenSearch를 사용하여 데이터를 인덱스 하고 시각화할 수 있다.

이 튜토리얼에서는, Droplet에 Logstash를 설치하고, Nginx 로그를 수집하기 위한 settings를 하고, 이를 DigitalOcean Managed OpenSearch에 보내는 방법을 배울 것이다.

사전 요구 사항

사용 사례

다음과 같은 경우에 이 셋업을 사용해야 할 수 있습니다:

  • 모니터링 및 문제 해결: 실시간 로그를 분석하여 웹 서버 パフォーマン스 및 에러를 추적합니다.
  • パフォーマンス 분석: 웹 トラffic 패턴과 서버 메트릭스에 대한 洞察을 얻습니다.
  • 로그 중앙화: 여러 Nginx 서버의 로그를 하나의 OpenSearch 인스턴스로 모음하여 更容易的管理을 위해 사용합니다.

노트: 셋업 시간은 大概 30분입니다.

단계 1 – Droplet에 Logstash 설치

Logstash은 이 곳에 托管되는 배열 파일을 사용하거나 operatingsystem に合わせた 패키지 리포지토리로 설치할 수 있습니다. 更容易的管理과 更新을 위해 대체적으로 패키지 리포지토리를 사용하는 것이 推奨됩니다. Ubuntu 등 Debian-based 시스템에서 APT 패키지 관리자를 사용할 수 있으며, CentOS 또는 RHEL과 같은 Red Hat-based 시스템에서는 yum을 사용할 수 있습니다. 이 두 방법은 Logstash를 시스템의 패키지 관리 인frastructure에 적절히 통합시키고 설치와 관리를 간단하게 합니다.

이 섹션에서는 aptyum 패키지 관리자를 사용하여 Logstash의 설치를 指导할 것입니다 Logstash를 Droplet에 configuring regardless of your Linux distribution.

Operating System을 찾기 위해 다음 명령을 실행하십시오 :

cat /etc/os-release

APT 기반 시스템 (Ubuntu/Debian)

1.Public Signing Key를 다운로드 및 설치하십시오 :

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이 now 你的 系统上 installed and running 하고 있습니다.

Step 2 – Installing the Open Search Output Plugin

You can install the OpenSearch output plugin by running the following command:

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

You can find more information about the plugin on this logstash-output-opensearch plugin repository.

Step 3 – Configuring Logstash to Send Nginx Logs to OpenSearch

A Logstash pipeline consists of three main stages: input, filter, and output. Logstash pipelines make use of plugins. You can make use of community plugins or create your own.

  • Input: This stage collects data from various sources. Logstash supports numerous input plugins to handle data sources like log files, databases, message queues, and cloud services.
  • Filter: This stage processes and transforms the data collected in the input stage. Filters can modify, enrich, and structure the data to make it more useful and easier to analyze.
  • 산출: 이 단계는 처리된 데이터를 목적지에 보내는 것입니다. 목적지는 데이터베이스, 파일, 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 구성의 概要

입력

input 블록은 로그를 읽기 위한 두 つ의 파일 입력을 구성합니다:

Nginx 로그:
경로:
/var/log/nginx/access.log (ACCESS 로그用途)
/var/log/nginx/error.log (에러 로그用途)
시작 위치: beginning – 로그 파일の 시작부분에서 읽음
sinceDB 경로: /dev/null – 连续 읽기 트랙킹을 사용하지 않음
태그:
["nginx_access"] for ACCESS 로그
["nginx_error"] for 에러 로그

注釈: Logstash 서비스가 입력 경로에 アクセス할 수 있도록 확인하세요.

FILTER

The filter block processes logs based on their tags:

Log Processing:
Access Logs:
Uses a grok filter to parse the access log format, extracting fields like client_ip, timestamp, method, request, http_version, response, bytes, referrer, and user_agent.
Removes the original message and certain metadata fields.

Error Logs:
Checks for the nginx_error tag and applies a grok filter to extract fields such as timestamp, level, pid, tid, and error_message.
Also removes the message and metadata fields.

OUTPUT

The output block routes events to OpenSearch based on their tags:

Routing to OpenSearch:
For both access and error logs, it specifies:
Hosts: OpenSearch 인스턴스의 URL.
User: 인증용 doadmin.
Password: OpenSearch 비밀번호.
Index:
Access logs 시 case nginx_access-%{+YYYY.MM.dd}
Error logs 시 case nginx_error-%{+YYYY.MM.dd}
SSL Settings: Enables SSL and certificate verification.

스텝 4 – OpenSearch configure

1. 웹 브라우저를 열고 OpenSearch Dashboard URL로 가기:

https://<OpenSearch-Hostname>

OpenSearch-Hostname 을 자신의 OpenSearch 서버의 호스트 이름으로 대체합니다.

2. 인덱스 패턴을 생성합니다.
a. 왼쪽 侧边栏에서 관리 > 대시보드 관리 > 인덱스 패턴로 이동합니다.
b. 상단 오른쪽에 인덱스 패턴 생성을 클릭합니다.
c. Logstash로 생성된 모든 인덱스와 일치하는 인덱스 패턴으로 nginx_access-* 또는 nginx_error-*을 입력하고 다음 단계를 클릭합니다.
d. 인덱스 패턴 생성을 클릭합니다.

3. 인덱스 패턴이 성공적으로 생성되어 인덱스 패턴 목록에 보여지는지 확인합니다.

4. 왼쪽 侧边栏에서 DISCOVER를 선택하고 생성한 인덱스 패턴(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 パッケージ 관리기를 사용하여 Logstash를 droplets 上で 실행시키는 方法을 살펴보았습니다. 또한 Nginx 로그를 correctamente 분석하고 OpenSearch로 보내기 위해 Logstash 구성 파일을 생성하고 조정했습니다. 그 다음 OpenSearch Dashboards에서 인덱스 패턴을 설정하여 로그가 적절히 인덱싱되고 분석에 사용할 수 있도록 확인했습니다.이러한 단계를 모두 완료하면 Logstash가 Nginx 로그를 OpenSearch로 수집하고 보내는 작동 중인 세팅을 가지고 있게 됩니다. 이 세팅은 OpenSearch의 強力な searching 및 的可視化 ツール을 사용하여 서버 로그를 분석할 수 있습니다.

문제가 발생하면 문제 해결 팁을 확인하고 Logstash와 OpenSearch 문서를 참조하여 further help를 얻을 수 있습니다. 정기적인 모니터링은 로그 시스템을 平稳하고 효율적으로 运行시키게 합니다.

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