ステータス:非推奨

この記事では、サポートされなくなったバージョンのCentOSについて説明します。 現在CentOS6を実行しているサーバーを運用している場合は、サポートされているバージョンのCentOSにアップグレードまたは移行することを強くお勧めします。

理由 CentOS 6は2020年11月30日に保守終了(EOL)に達し、セキュリティパッチまたはアップデートを受信しなくなりました。 このため、このガイドは維持されなくなりました。

代わりに参照:このガイドは参照として役立つ場合がありますが、他のCentOSリリースでは機能しない場合があります。 可能な場合は、使用しているCentOSのバージョン用に作成されたガイドを使用することを強くお勧めします。

次のDigitalOceanチュートリアルシリーズは、CentOS7サーバーでLogstashとKibanaを使用してログを一元化する方法の概要としてすぐに役立つ可能性があります。

序章

このチュートリアルでは、Logstash1.4.2とKibana3のインストールと、システムのsyslogを一元化された場所に収集して視覚化するように構成する方法について説明します。 Logstashは、将来使用するためにログを収集、解析、および保存するためのオープンソースツールです。 Kibana 3は、Logstashがインデックスを作成したログを検索および表示するために使用できるWebインターフェイスです。 これらのツールは両方ともElasticsearchに基づいています。 Elasticsearch、Logstash、およびKibanaを一緒に使用すると、ELKスタックと呼ばれます。

一元化されたログは、サーバーまたはアプリケーションの問題を特定するときに非常に役立ちます。これにより、すべてのログを1か所で検索できるようになります。 また、特定の時間枠でログを相互に関連付けることにより、複数のサーバーにまたがる問題を特定できるので便利です。

Logstashを使用してすべてのタイプのログを収集することは可能ですが、このチュートリアルの範囲をsyslog収集に限定します。

私たちの目標

チュートリアルの目的は、複数のサーバーのsyslogを収集するようにLogstashを設定し、収集されたログを視覚化するようにKibanaを設定することです。

Logstash / Kibanaのセットアップには、次の4つの主要コンポーネントがあります。

  • Logstash :受信ログを処理するLogstashのサーバーコンポーネント
  • Elasticsearch :すべてのログを保存します
  • Kibana :ログを検索および視覚化するためのWebインターフェイス
  • Logstash Forwarder :Logstashにログを送信するサーバーにインストールされたLogstash Forwarderは、lumberjackネットワーキングプロトコルを利用してLogstashと通信するログ転送エージェントとして機能します。

最初の3つのコンポーネントを単一のサーバーにインストールします。これをLogstashサーバーと呼びます。 Logstash Forwarderは、ログを収集するすべてのサーバーにインストールされます。これらのサーバーをまとめてサーバーと呼びます。

前提条件

このチュートリアルを完了するには、CentOS6.5VPSへのルートアクセスが必要です。 これを設定する手順は、ここにあります(手順3および4): CentOS6を使用したサーバーの初期設定。

Logstashサーバーに必要なCPU、RAM、およびストレージの量は、収集するログの量によって異なります。 このチュートリアルでは、Logstashサーバーに次の仕様のVPSを使用します。

  • OS:CentOS 6.5
  • RAM:2GB
  • CPU:2

Logstashサーバーに加えて、ログを収集するサーバーをいくつか用意する必要があります。

Logstashサーバーのセットアップを始めましょう!

Java7をインストールします

ElasticsearchとLogstashにはJava7が必要なので、今すぐインストールします。 OpenJDK7をインストールします。

次のコマンドを使用して、OpenJDK7の最新の安定バージョンをインストールします。

sudo yum -y install java-1.7.0-openjdk

Java 7がインストールされたので、ElasticSearchをインストールしましょう。

Elasticsearchをインストールする

:Logstash1.4.2はElasticsearch1.1.1を推奨しています。

次のコマンドを実行して、Elasticsearchの公開GPGキーをrpmにインポートします。

sudo rpm --import http://packages.elasticsearch.org/GPG-KEY-elasticsearch

Elasticsearch用の新しいyumリポジトリファイルを作成および編集します。

sudo vi /etc/yum.repos.d/elasticsearch.repo

次のリポジトリ構成を追加します。

[elasticsearch-1.1]
name=Elasticsearch repository for 1.1.x packages
baseurl=http://packages.elasticsearch.org/elasticsearch/1.1/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1

保存して終了。

次のコマンドでElasticsearch1.1.1をインストールします。

sudo yum -y install elasticsearch-1.1.1

Elasticsearchがインストールされました。 構成を編集しましょう:

sudo vi /etc/elasticsearch/elasticsearch.yml

動的スクリプトを無効にするには、ファイルのどこかに次の行を追加します。

script.disable_dynamic: true

また、Elasticsearchインスタンスへの外部アクセスを制限して、部外者がHTTPAPIを介してデータを読み取ったりElasticseachクラスターをシャットダウンしたりできないようにする必要があります。 指定する行を検索します network.host コメントを外して、次のようにします。

network.host: localhost

次に、を見つけてマルチキャストを無効にします discovery.zen.ping.multicast.enabled アイテムとコメント解除なので、次のようになります。

discovery.zen.ping.multicast.enabled: false

保存して終了 elasticsearch.yml.

次にElasticsearchを起動します。

sudo service elasticsearch restart

次に、次のコマンドを実行して、起動時にElasticsearchを起動します。

sudo /sbin/chkconfig --add elasticsearch

Elasticsearchが稼働しているので、Kibanaをインストールしましょう。

Kibanaをインストールする

:Logstash1.4.2はKibana3.0.1を推奨しています。

次のコマンドを使用して、Kibanaをホームディレクトリにダウンロードします。

cd ~; curl -O https://download.elasticsearch.org/kibana/kibana/kibana-3.0.1.tar.gz

tarを使用してKibanaアーカイブを抽出します。

tar xvf kibana-3.0.1.tar.gz

Kibana構成ファイルを開いて編集します。

vi ~/kibana-3.0.1/config.js

Kibana構成ファイルで、 elasticsearch サーバーのURL、およびポート番号(デフォルトでは9200)を次のように置き換えます 80:

   elasticsearch: "http://"+window.location.hostname+":80",

これが必要なのは、ポート80でKibanaにアクセスすることを計画しているためです(つまり、 http://logstash_server_public_ip/).

Nginxを使用してKibanaのインストールを提供するので、ファイルを適切な場所に移動しましょう。 次のコマンドでディレクトリを作成します。

sudo mkdir -p /usr/share/nginx/kibana3

次に、Kibanaファイルを新しく作成したディレクトリにコピーします。

sudo cp -R ~/kibana-3.0.1/* /usr/share/nginx/kibana3/

Kibana Webインターフェースを使用する前に、Nginxをインストールする必要があります。 今それをしましょう。

Nginxをインストールします

Nginxを含むYumリポジトリを追加します。

sudo rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

Yumを使用してNginxをインストールします。

sudo yum -y install nginx

KibanaがユーザーをElasticsearchとインターフェースする方法(ユーザーはElasticsearchに直接アクセスできる必要があります)のため、ポート80リクエストをポート9200(Elasticsearchがデフォルトでリッスンするポート)にプロキシするようにNginxを構成する必要があります。 幸いなことに、Kibanaはこれのほとんどを設定するサンプルのNginx構成を提供します。

サンプルのNginx構成をKibanaのgithubリポジトリからホームディレクトリにダウンロードします。

cd ~; curl -OL https://gist.githubusercontent.com/thisismitch/2205786838a6a5d61f55/raw/f91e06198a7c455925f6e3099e3ea7c186d0b263/nginx.conf

編集用にサンプル構成ファイルを開きます。

vi nginx.conf

の値を見つけて変更します server_name FQDN(またはドメイン名を使用していない場合はパブリックIPアドレス)と root Kibanaをインストールした場所に移動すると、次のエントリのようになります。

  server_name FQDN;
  root  /usr/share/nginx/kibana3;

保存して終了。 次に、次のコマンドを使用して、Nginxのデフォルトサーバーブロックにコピーします。

sudo cp ~/nginx.conf /etc/nginx/conf.d/default.conf

今すぐインストールします apache2-utils 使用できるように htpasswd ユーザー名とパスワードのペアを生成するには:

sudo yum install httpd-tools-2.2.15

次に、Kibanaでダッシュボードの保存と共有に使用するログインを生成します(自分のユーザー名に置き換えてください)。

sudo htpasswd -c /etc/nginx/conf.d/kibana.myhost.org.htpasswd user

次に、パスワードを入力して確認します。 作成したばかりのhtpasswdファイルは、最近構成したNginx構成で参照されます。

次に、Nginxを再起動して、変更を有効にします。

sudo service nginx restart

また、起動時に起動するようにNginxを構成します。

sudo chkconfig --levels 235 nginx on

これで、FQDNまたはLogstashサーバーのパブリックIPアドレスを介してKibanaにアクセスできます。 http://logstash_server_public_ip/. Webブラウザーでそこにアクセスすると、ダッシュボードを表示できるKibanaウェルカムページが表示されますが、Logstashがまだ設定されていないため、表示するログはありません。 今それをしましょう。

Logstashをインストールします

LogstashパッケージはElasticsearchと同じGPGキーを共有しており、その公開キーはすでにインストールされているので、Logstash用の新しいYumリポジトリファイルを作成して編集しましょう。

sudo vi /etc/yum.repos.d/logstash.repo

次のリポジトリ構成を追加します。

[logstash-1.4]
name=logstash repository for 1.4.x packages
baseurl=http://packages.elasticsearch.org/logstash/1.4/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1

保存して終了。

次のコマンドでLogstash1.4.2をインストールします。

sudo yum -y install logstash-1.4.2

Logstashはインストールされていますが、まだ構成されていません。

SSL証明書を生成する

Logstash Forwarderを使用してサーバーからLogstashサーバーにログを送信するため、SSL証明書とキーのペアを作成する必要があります。 この証明書は、LogstashForwarderがLogstashサーバーのIDを確認するために使用されます。

これで、SSL証明書を生成するための2つのオプションがあります。 クライアントサーバーがLogstashサーバーのIPアドレスを解決できるようにするDNS設定がある場合は、オプション2を使用します。 それ以外の場合は、オプション1でIPアドレスを使用できます。

オプション1:IPアドレス

LogstashサーバーのIPアドレスを解決するために、ログを収集するサーバーを許可するDNS設定がない場合は、LogstashサーバーのプライベートIPアドレスをに追加する必要があります。 subjectAltName 生成しようとしているSSL証明書の(SAN)フィールド。 これを行うには、OpenSSL構成ファイルを開きます。

sudo vi /etc/pki/tls/openssl.cnf

を見つける [ v3_ca ] ファイルのセクションを作成し、その下に次の行を追加します(LogstashサーバーのプライベートIPアドレスに置き換えます)。

subjectAltName = IP: logstash_server_private_ip

保存して終了。

次に、次のコマンドを使用して、SSL証明書と秘密鍵を適切な場所(/ etc / pki / tls /)に生成します。

cd /etc/pki/tls
sudo openssl req -config /etc/pki/tls/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

logstash-forwarder.crt ファイルは、ログをLogstashに送信するすべてのサーバーにコピーされますが、少し後で行います。 Logstashの構成を完了しましょう。 このオプションを使用した場合は、オプション2をスキップして、Logstashの構成に進みます。

オプション2:FQDN(DNS)

プライベートネットワークでDNSを設定している場合は、LogstashサーバーのプライベートIPアドレスを含むAレコードを作成する必要があります。このドメイン名は次のコマンドでSSL証明書を生成するために使用されます。 または、サーバーのパブリックIPアドレスを指すレコードを使用することもできます。 サーバー(ログを収集するサーバー)がドメイン名をLogstashサーバーに解決できることを確認してください。

次に、次のコマンドを使用して、適切な場所(/ etc / pki / tls /…)にSSL証明書と秘密鍵を生成します(LogstashサーバーのFQDNに置き換えます)。

cd /etc/pki/tls
sudo openssl req -subj '/CN=<^>logstash_server_fqdn/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

logstash-forwarder.crt ファイルは、ログをLogstashに送信するすべてのサーバーにコピーされますが、少し後で行います。 Logstashの構成を完了しましょう。

Logstashを構成する

Logstash構成ファイルはJSON形式であり、/ etc / logstash/conf.dにあります。 構成は、入力、フィルター、および出力の3つのセクションで構成されます。

と呼ばれる構成ファイルを作成しましょう 01-lumberjack-input.conf 「木こり」入力(Logstash Forwarderが使用するプロトコル)を設定します。

sudo vi /etc/logstash/conf.d/01-lumberjack-input.conf

次の入力構成を挿入します。

input {
  lumberjack {
    port => 5000
    type => "logs"
    ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
    ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  }
}

保存して終了します。 これは、 lumberjack tcpポートでリッスンする入力 5000、以前に作成したSSL証明書と秘密鍵を使用します。

それでは、という構成ファイルを作成しましょう。 10-syslog.conf、ここで、syslogメッセージのフィルターを追加します。

sudo vi /etc/logstash/conf.d/10-syslog.conf

次のsyslogfilter構成を挿入します。

filter {
  if [type] == "syslog" {
    grok {
      match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
      add_field => [ "received_at", "%{@timestamp}" ]
      add_field => [ "received_from", "%{host}" ]
    }
    syslog_pri { }
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
  }
}

保存して終了します。 このフィルターは、(Logstash Forwarderによって)「syslog」タイプとしてラベル付けされたログを検索し、「grok」を使用して着信syslogログを解析し、構造化およびクエリ可能にしようとします。

最後に、という構成ファイルを作成します 30-lumberjack-output.conf:

sudo vi /etc/logstash/conf.d/30-lumberjack-output.conf

次の出力構成を挿入します。

output {
  elasticsearch { host => localhost }
  stdout { codec => rubydebug }
}

保存して終了。 この出力は基本的に、Elasticsearchにログを保存するようにLogstashを構成します。

この構成では、Logstashはフィルターと一致しないログも受け入れますが、データは構造化されません(例: フィルタリングされていないNginxまたはApacheログは、HTTP応答コード、送信元IPアドレス、提供されたファイルなどでメッセージを分類するのではなく、フラットメッセージとして表示されます。

Logstash Forwarder入力を使用する他のアプリケーションにフィルターを追加する場合は、入力構成と出力構成の間でソートされるように、必ずファイルに名前を付けてください(つまり、 01から30の間)。

Logstashを再起動して、構成の変更を有効にします。

sudo service logstash restart

Logstashサーバーの準備ができたので、LogstashForwarderのセットアップに移りましょう。

LogstashForwarderを設定する

:ログをLogstashサーバーに送信するサーバーごとにこれらの手順を実行します。 DebianベースのLinuxディストリビューションにLogstashForwarderをインストールする手順については(例: Ubuntu、Debianなど)、このチュートリアルのUbuntuバリエーション Set UpLogstashForwarderセクションを参照してください。

SSL証明書とLogstashフォワーダーパッケージをコピーする

Logstashサーバーで、SSL証明書をサーバーにコピーします(自分のログインに置き換えてください)。

scp /etc/pki/tls/certs/logstash-forwarder.crt user@server_private_IP:/tmp

LogstashForwarderパッケージをインストールします

サーバーで、LogstashForwarderRPMをホームディレクトリにダウンロードします。

cd ~; curl -O http://download.elasticsearch.org/logstash-forwarder/packages/logstash-forwarder-0.3.1-1.x86_64.rpm

次に、LogstashForwarderパッケージをインストールします。

sudo rpm -ivh ~/logstash-forwarder-0.3.1-1.x86_64.rpm

次に、Logstash Forwarder initスクリプトをインストールして、起動時に開始するようにします。 logstashbook.comが提供するinitスクリプトを使用します。

cd /etc/init.d/; sudo curl -o logstash-forwarder http://logstashbook.com/code/4/logstash_forwarder_redhat_init
sudo chmod +x logstash-forwarder

initスクリプトは、というファイルに依存しています /etc/sysconfig/logstash-forwarder. サンプルファイルをダウンロードできます。

sudo curl -o /etc/sysconfig/logstash-forwarder http://logstashbook.com/code/4/logstash_forwarder_redhat_sysconfig

編集のために開きます:

sudo vi /etc/sysconfig/logstash-forwarder

そして、 LOGSTASH_FORWARDER_OPTIONS 値なので、次のようになります。

LOGSTASH_FORWARDER_OPTIONS="-config /etc/logstash-forwarder -spool-size 100"

保存して終了します。

次に、SSL証明書を適切な場所(/ etc / pki / tls / certs)にコピーします。

sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/

LogstashForwarderを構成する

サーバーで、JSON形式のLogstashForwarder構成ファイルを作成および編集します。

sudo vi /etc/logstash-forwarder

次に、次の行をファイルに追加し、LogstashサーバーのプライベートIPアドレスを次のように置き換えます。 logstash_server_private_IP:

{
  "network": {
    "servers": [ "logstash_server_private_IP:5000" ],
    "timeout": 15,
    "ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt"
  },
  "files": [
    {
      "paths": [
        "/var/log/messages",
        "/var/log/secure"
       ],
      "fields": { "type": "syslog" }
    }
   ]
}

保存して終了します。 これにより、Logstash Forwarderがポート5000(以前に入力を指定したポート)でLogstashサーバーに接続するように構成され、以前に作成したSSL証明書が使用されます。 paths セクションは送信するログファイルを指定し(ここではmessagessecureを指定)、typeセクションはこれらのログを指定しますタイプは「syslog*」(フィルターが探しているタイプ)です。

これは、ポート5000のLogstashへの他のログファイルにLogstashForwarderを構成するためにさらにファイル/タイプを追加する場所であることに注意してください。

次に、chkconfigを使用してLogstashForwarderサービスを追加します。

sudo chkconfig --add logstash-forwarder

次に、Logstash Forwarderを起動して、変更を適用します。

sudo service logstash-forwarder start

これで、LogstashForwarderはメッセージauth.logをLogstashサーバーに送信します。 ログを収集する他のすべてのサーバーに対して、このプロセスを繰り返します。

Kibanaに接続する

ログを収集するすべてのサーバーでLogstashForwarderのセットアップが完了したら、前にインストールしたWebインターフェイスであるKibanaを見てみましょう。

Webブラウザーで、LogstashサーバーのFQDNまたはパブリックIPアドレスに移動します。 Kibanaのウェルカムページが表示されます。

Logstash Dashboard をクリックして、作成済みのダッシュボードに移動します。 以下にログメッセージを含むログイベントのヒストグラムが表示されます(イベントまたはメッセージが表示されない場合は、4つのLogstashコンポーネントの1つが正しく構成されていません)。

ここでは、ログを検索および参照できます。 ダッシュボードをカスタマイズすることもできます。 これは、Kibanaインスタンスがどのように見えるかのサンプルです。

次のことを試してください。

  • 「root」を検索して、誰かがrootとしてサーバーにログインしようとしていないかどうかを確認します
  • 特定のホスト名を検索する
  • ヒストグラムの領域を選択するか、上のメニューから時間枠を変更します
  • ヒストグラムの下のメッセージをクリックして、データがどのようにフィルタリングされているかを確認してください

Kibanaには、グラフ化やフィルタリングなど、他にも多くの機能がありますので、お気軽にご確認ください。

結論

これで、syslogがLogstashを介して一元化され、Kibanaで視覚化できるようになったので、すべての重要なログを一元化することから始めることができます。 Logstashにはほとんどすべてのタイプのログを送信できますが、grokを使用して解析および構造化すると、データはさらに便利になります。

Kibanaダッシュボードには、サーバーにアクセスできるすべてのユーザーがアクセスできるため、htaccessなどでサーバーを保護する必要があることに注意してください。