Logstash를 통해 Apache 로그를 OpenSearch로 전달하는 방법

소개

웹 서버 로그 관리는 웹사이트의 성능을 유지하고, 문제 해결하고, 사용자 행동에 대한 인사이트를 얻는 데 중요합니다. Apache는 가장 인기 있는 웹 서버 중 하나입니다. 그것은 가치 있는 정보를 포함하는 접속 및 에러 로그를 생성합니다. 이러한 로그를 효율적으로 관리하고 분석하기 위해서는, Logstash를 사용하여 이러한 로그를 처리하고 DigitalOcean의 Managed OpenSearch로 인덱싱 및 的可视化을 转发할 수 있습니다.

이 튜orial에서는, Apache 로그를 수집하고 Managed OpenSearch로 분석하기 위해 Logstash를 Droplet에 설치하고 configure 하는 과정을 指导할 것입니다.

사전 요구 사항

  1. Apache 웹 서버를 설치한 Droplet/s.
  2. Managed OpenSearch クラスタ

과정 1 – Logstash 설치

Logstash은 二进制 파일로 설치하거나 패키지 仓储(repository)를 사용하여 설치할 수 있습니다. 더 나은 관리와 更新을 위해서는 仓储을 사용하는 것이 일반적으로 建议されます.

이 섹션에서는 APT와 YUM 패키지 관리자를 사용하여 Logstash를 Droplet에 설치하는 것을 도울 것입니다.

OS를 식별해 주세요:

cat /etc/os-release

APT 기반 시스템 (Ubuntu/Debian)

공개 서명 키를 다운로드 하고 설치하십시오:

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

Debian에서 계속하기 전に apt-transport-https パッケージ을 설치해야 할 수 있습니다:

sudo apt-get install apt-transport-https

Repository 정의를 /etc/apt/sources.list.d/elastic-8.x.list에 저장합니다:

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

위에 described 한 echo 方法을 사용하여 Logstash 仓储을 추가하십시오. add-apt-repository를 사용하지 마십시오. 왜냐하면 deb-src 条目을 추가하게 되며 私たち는 소스 パッケージ를 제공하지 않습니다. 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 条目을 지웁니다. 그러면 예상대로 설치 should work합니다.

`sudo apt-get update`를 실행하면 仓储이 사용 가능하게 됨니다. 다음과 같이 설치할 수 있습니다:

sudo apt-get update && sudo apt-get install logstash

YUM 기반 시스템 (CentOS/RHEL) 용

공개 서명 키를 다운로드 및 설치하세요:

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

옆에 있는 /etc/yum.repos.d/logstash.repo 파일에 다음을 추가합니다. 이 파일을 更新하거나 생성하실 때 ‘tee’ 기능을 사용할 수 있습니다.

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

Ur repository is ready for use. You can install it with:

sudo yum install logstash

자세한 정보는 Logstash 설치 指导서를 참조하세요.

Step 2 – Configuring Logstash to Send Logs to OpenSearch

Logstash pipeline consists of three main stages: input, filter, and output. Logstash pipelines use plugins. You can use 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.

  • 필터: 이 阶段에서는 입력阶段에서 수집한 데이터를 처리하고 변경합니다. 필터는 데이터를 수정하고, 가공하고, 구조화하여 더욱 유용하게 만들고 분석하기 쉽게 만듭니다.
  • 출력: 이 阶段에서는 처리된 데이터를 destiny로 보냅니다. destiny는 데이터 베이스, 파일, 그리고 OpenSearch과 같은 데이터 스토어로 구성할 수 있습니다.

的第3步 – Open Search 출력 플러그인 설치

OpenSearch 출력 플러그인은 以下의 명령어를 실행하여 설치할 수 있습니다:

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

자세한 정보는 이 logstash-output-opensearch-plugin 저장库에 있습니다.

이제 pipeline을 만들겠습니다:

/etc/logstash/conf.d/에 새 파일 apache_pipeline.conf를 생성하고 다음 내용을 복사하세요.

input {
  file {
    path => "/var/log/apache2/access.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => "apache_access"
  }

  file {
    path => "/var/log/apache2/error.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => "apache_error"
  }
}

filter {
  if "apache_access" in [tags] {
    grok {
        match => { "message" => "%{HTTPD_COMBINEDLOG}" }
    }
    mutate {
        remove_field => [ "message","[log][file][path]","[event][original]" ]
      }
   } else {
   grok {
        match => { "message" => "%{HTTPD24_ERRORLOG}" }
    }
   }
}

output {
  if "apache_access" in [tags] {
  opensearch {
    hosts       => "https://<OpenSearch-Hostname>:25060"
    user        => "doadmin"
    password    => "<your_password>"
    index       => "apache_access"
    ssl_certificate_verification => true
  }

  } else {
  opensearch {
    hosts       => "https://<OpenSearch-Hostname>:25060"
    user        => "doadmin"
    password    => "<your_password>"
    index       => "apache_error"
    ssl_certificate_verification => true
  }
  }
}

<OpenSearch_Host>를 您의 OpenSearch 서버의 主机이름으로 대체하고 <OpenSearch_Password>를 您的 OpenSearch 암호로 대체하세요.

위의 설정을 분석해봅시다.

  • INPUT: 이 부분은 이벤트의 источник를 구성하는 것을 의미합니다. 이 곳에서는 ‘file’ 인풋 플러그인을 사용합니다.

  • path => “/var/log/apache2/access.log” : Logstash가 읽을 것인 Apache Acces log 파일의 경로를 지정합니다.

    Logstash 서비스가 입력 경로에 アクセス할 수 있도록 해야 합니다.

  • start_position => “beginning”: Logstash가 로그 파일을 어디서 읽어들일 지 정하는 것을 의미합니다. “beginning”은 Logstash이 파일을 끝에서 읽어들이지 않고 시작지점부터 처리하는 것을 의미합니다.

  • sincedb_path => “/dev/null”: 로그스싑스에서 로그 파일의 현재 위치를 추적하기 위해 사용하는 sincedb 파일의 경로를 지정합니다. sincedb 파일은 로그스싑스가 재시작 또는 오류 발생 시 그 곳에서 다시 시작할 수 있게 하는 역할을 합니다.

  • tags => “apache_access”: 이 입력으로부터 읽은 이벤트에 тего를 대腹합니다. 로그스싑스 내에서 이벤트를 Identifying하고 filtering하는 것에 유용합니다. 보통 구성의 출력 또는 過濾 阶段에서 downstream로 사용합니다. 우리는 后者에서 tags를 사용합니다.

  • FILTER: 이벤트를 처리하는 용도입니다.

    조건부 시작:

    (if "apache_access" in [tags]):
    

    이 조건은 들어오는 로그 이벤트의 [tags] 필드에 apache_access 태그가 있는지 확인합니다. 우리는 이 조건을 사용하여 Apache 액세스 및 에러 로그에 적절한 GROK 필터를 적용합니다.

  • Apache 액세스 로그용 Grok 필터:

    grok {
        match => { "message" => "%{HTTPD_COMBINEDLOG}" }
    }
    

    grok 필터 %{HTTPD_COMBINEDLOG}은 Logstash에서 사전 정의된 패턴으로 Apache 결합 액세스 로그 포맷을 파싱하는 데 사용됩니다. 이것은 IP 주소, 타임스탬프, HTTP 메서드, URI, 상태 코드 등을 수신 이벤트의 message 필드에서 추출합니다.

  • Mutate Filter Remove (optional): Apache 로그를 해석한 후, certain fields 를 mutate-remove 를 사용하여 제거합니다.

    mutate {
        remove_field => [ "message","[log][file][path]","[event][original]" ]
    }
    
  • Else 조건: [tags]에서 apache_access 태그가 없으면 else 블록이 실행된다. 이 else 블록은 Apache 에러 로그를 위한 다른 GROK 필터를 포함하고 있다.

    grok {
        match => { "message" => "%{HTTPD24_ERRORLOG}" }
    }
    

    이 grok 필터 %{HTTPD24_ERRORLOG}은 Apache 에러 로그 형식과 일치하는 메시지를 파싱한다. 시간戳, 로그 레벨, 에러 메시지와 같은 에러 로그에 관련된 필드를 추출한다.

    GROK 패턴은 다음에서 찾을 수 있다: https://github.com/logstash-plugins/logstash-patterns-core/tree/main/patterns.

  • OUTPUT: 출력 플러그인은 이벤트를 특정 목적지로 보냅니다.

    출력 区块는 if 조건으로 시작합니다. 여기에서는 if 조건을 사용하고 있습니다.

    if "apache_access" in [tags] {}

    이 if 조건은 로그를 OpenSearch로 두 개의 separate indexes, apache_errorapache_access로 라우팅하기 위해 사용됩니다.

    OpenSearch Output plugin에 대해 더 자세히 보기로 합니다.

    hosts            => "https://XXX:25060"  Your Open search Hostname
    user             => "doadmin"            Your Open search Username
    password         => "XXXXX"              OpenSearch Password
    index            => "apache_error"       Index name in OpenSearch
    ssl_certificate_verification => true     Enabled SSL certificate verification
    

的第 4 步 – Logstash 시작

Pipeline이 구성되면, Logstash 서비스를 시작합니다:

systemctl enable logstash.service
systemctl start logstash.service
systemctl status logstash.service

第 5 步 – 문제 해결

연결 가능성 확인

Logstash가 OpenSearch로 연결할 수 있는지 connectivity 测验을 실행할 수 있습니다:

curl -u your_username:your_password -X GET "https://your-opensearch-server:25060/_cat/indices?v"

your-opensearch-server를 자신의 OpenSearch 서버의 主机名으로 대체하고, your_username, your_password를 자신의 OpenSearch 凭据로 대체합니다.

데이터 인젝션

OpenSearch에서 데이터가 적절히 인덱스 되는지 확인합니다:

curl -u your_username:your_password -X GET "http://your-opensearch-server:25060/<your-index-name>/_search?pretty"

your-opensearch-server를 자신의 OpenSearch 서버의 主机名으로 대체하고, your_username, your_password를 자신의 OpenSearch 凭据로 대체하고, 同样地, your-index-name를 인덱스 이름으로 대체합니다.

防火墙 및 네트워크 구성

로그스틱과 오픈챗를 포트 25060 上で 통신 가능하게 하는 防火墙 규칙과 네트워크 설정을 확인하십시오.

로그

로그스틱의 로그는 /var/log/logstash/logstash-plain.log 에 있습니다.

자세한 정보는 문제 해결 을 참조하십시오.

결론

이 가이드에서는 로그스틱을 사용하여 아帕치 로그를 오픈챗로 수집하고 转发하는 방법을 이해하는 과정을 walked through 했습니다. 이러한 내용을 快速으로 다시 보기 위해 다음과 같이 요약합니다:

로그스틱 설치: 로그스틱을 드랍LET에 설치하는 방법을 이를 Linux 배포판에 따라 APT 또는 YUM 包管理자를 사용하는 것을 다룹니다.

로그스틱 구성 수정: Logstash 구성 파일을 생성하고 수정하여 Apache 로그가 正确的하게 해석되고 OpenSearch로 转发되는 지 확인합니다.

오픈챗에서 확인: OpenSearch Dashboards에서 인덱스 패턴을 설정하여 로그가 적절히 인덱seed되고 분석하는 것이 보이는지 확인합니다.

이러한 과정을 마치면 Logstash가 Apache 로그를 수집하고 OpenSearch로 转发하는 기능적인 구성을 갖추셨습니다.

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