【Elastic Stack】Logstash設定のきほん

スポンサーリンク

はじめに

Logstashのパイプラインの設定について、基本的な部分を紹介したいと思います。

Logstash

Logstashは、Elastic Stackの一つで、ログを処理するパイプラインになります。つまり、ログを受け取って、何かしらの処理をして、どこかに送ることができます。

Logstashの処理は下記の流れになります。



Elasticのドキュメントより

inputでデータを受け取り、filterでデータを処理し、outputでデータを宛先に送ります。

設定ファイル

Logstashの基本的な設定ファイルについて紹介します。

構造

設定ファイルの基本的な構造は下記のようになります。

input {
  ...
}

filter {
  ...
}

output {
  ...
}

inputfilteroutputから構成されます。inputoutputは必須で、filterはオプションです。

それぞれプラグインが用意されていて、さまざまなデータに対応できるようになっています。

使えるデータの型については、公式ドキュメントを参照してください。

Structure of a pipeline | Logstash Reference [8.7] | Elastic

input

inputは、データを取得するのに使われます。

よく使われるプラグインには、下記のようなものるあります。

  • file: ファイルからデータを取得
  • syslog syslogからデータを取得
  • beats: Beatsからデータを取得
Input plugins | Logstash Reference [8.7] | Elastic

filter

filterは、受け取ったデータに対してさまざまな処理を行います。

よく使われるプラグインには、下記のようなものるあります。

  • grok: 任意のテキストをパースし構造化
  • mutate: フィールドの変換
  • drop: イベントの削除
Filter plugins | Logstash Reference [8.7] | Elastic

output

outputは、データを特定の宛先に送ります。

よく使われるプラグインには、下記のようなものるあります。

  • elasticsearch: Elasticsearchに送信
  • file: ファイルに書き込み
Output plugins | Logstash Reference [8.7] | Elastic

試してみる

簡単な例で試してみたいと思います。

ローカル環境の準備

下記で紹介しているdocker-elkリポジトリを活用します。

Docker ComposeでElastic Stackをローカルに構築
はじめにDockerComposeを使って、ローカルにElasticStackのうちElasticsearch、Logstash、Kibanaを構築していきたいと思います。ElasticstackとはElasticStackとは、Elast...
GitHub - deviantony/docker-elk: The Elastic stack (ELK) powered by Docker and Compose.
TheElasticstack(ELK)poweredbyDockerandCompose.-GitHub-deviantony/docker-elk:TheElasticstack(ELK)poweredbyDockerandCompose.

まずはリポジトリをクローンしてきます。

git clone [email protected]:deviantony/docker-elk.git
cd docker-elk

次に、filebeatを利用するので、docker-elk/extensions/filebeat/config/filebeat.ymlの設定を下記のように変更して、filebeatからLogstashに送信されるようにします。

## Filebeat configuration
## https://github.com/elastic/beats/blob/master/deploy/docker/filebeat.docker.yml
#

filebeat.config:
  modules:
    path: ${path.config}/modules.d/*.yml
    reload.enabled: false

filebeat.autodiscover:
  providers:
    # The Docker autodiscover provider automatically retrieves logs from Docker
    # containers as they start and stop.
    - type: docker
      hints.enabled: true

processors:
  - add_cloud_metadata: ~

output.logstash: # 宛先をLogstashに変更
  hosts: ["logstash:5044"]

## HTTP endpoint for health checking
## https://www.elastic.co/guide/en/beats/filebeat/current/http-endpoint.html
#

http.enabled: true
http.host: 0.0.0.0

Logstashの設定

次にLogstashの設定を変更します。

今回はシンプルに、inputでBeatsからデータを取得して、filterでフィールドを追加して、outputでElasticsearchに送信する設定にしました。

input { # Beatsからデータ取得
  beats {
    port => 5044
  }
}

filter { # フィールド追加
  mutate {
    add_field => {
      "hoge" => "foo"
    }
  }
}

output { # Elasticsearchに送信
  elasticsearch {
    hosts => "elasticsearch:9200"
    user => "logstash_internal"
    password => "${LOGSTASH_INTERNAL_PASSWORD}"
  }
}

Elastic Stackの起動

filebeatとLogstashの設定変更が完了したら、Docker ComposeでElastic Stackを起動させます。

docker-compose -f docker-compose.yml -f extensions/filebeat/filebeat-compose.yml up -d

動作確認

http://localhost:5601にアクセスして、Kibanaからログを確認してみます。

filebeatのログがフィールドが追加されて、送信されていることが確認できます。

参考

タイトルとURLをコピーしました