【tcsh】CentOS8.2にelastic stackをインストールするメモ



公開:2020/06/21
更新:2020/06/21

久々の更新となりました。
以前Elastic Searchと、kibanaをインストールしたblogと動画を投稿したのですが、いろいろ調べていると、logstashというログの収集役のソフトウェアがあったり、ログを転送する役割のfilebeatというソフトウェアがあったりしたので、一緒にインストールしてみました。

使い方はこれから笑

環境


仮想化:VirtualBox6.1
OS:CentOS8.2
IPアドレス:192.168.56.101

・接続イメージです。
クライアント → nginx → kibana → elasticsearch ← logstach
別のノード  → filebeat  → → → → → → →  ↑

・フロントにnginxを置いてbasic認証させる構成にしています。
・複数ホストで動かしたい場合はnginxのproxypassを変更して各elk stackのノードに転送させてあげてください。
・filebeatは別ノードに入れて、別のノードのログを転送させる事ができますが、メモのため同一ノードに入れています。ご自由にアレンジしてみて下さい。(やり方がわからなければコメント下さい)

手順





・SELinuxをオフにする
vi /etc/sysconfig/selinux

SELINUX=disabled

・Firewallの許可設定
firewall-cmd --add-service=http --permanent
firewall-cmd --add-port=5044/tcp --permanent
 ※filebeatのためのポートの許可

・設定反映のためにリブート
reboot

・OpenJDKのインストール
sudo dnf install -y java-11-openjdk-devel

・ディレクトリの確認
which java
→/usr/bin/java

・JAVAの環境設定
cat > /etc/profile.d/java11.sh <<EOF
export JAVA_HOME=$(dirname $(dirname $(readlink $(readlink $(which javac)))))
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
EOF

・ファイルの読み込み
source /etc/profile.d/java11.sh



・ELKのリポジトリ追加
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

・ディレクトリ移動
cd /etc/yum.repos.d/

・リポジトリファイルの作成
vi elasticsearch.repo


[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md


・ELKのインストール
sudo dnf install -y elasticsearch kibana logstash

ElasticSearchのセットアップ





・Elastic Serachの設定フォルダへ移動
cd /etc/elasticsearch/

・設定ファイルの編集
vi elasticsearch.yml
下記のディレクティブのコメントを外す。


network.host: 127.0.0.1
http.port: 9200


・ヒープサイズの変更
vi jvm.options


-Xms512m
-Xmx512m


・ElasticSearchの自動起動
sudo systemctl enable elasticsearch

・ElasticSearchのステータス確認
sudo systemctl status elasticsearch

・ElasticSearchの起動
sudo systemctl start elasticsearch

・ElasticSearchのステータス確認
sudo systemctl status elasticsearch

kibanaのセットアップ





・kibanaの設定ファイルディレクトリへ移動
cd /etc/kibana/

・kibanaの設定ファイルを更新
vi kibana.yml
→下記のディレクティブのコメントアウト


server.port: 5601
server.host: "127.0.0.1"
elasticsearch.url: "http://127.0.0.1:9200"


・kibanaの自動起動
sudo systemctl enable kibana

・kibanaのステータス確認
sudo systemctl status kibana

・kibanaの起動
sudo systemctl start kibana

・kibanaのステータス確認
sudo systemctl status kibana

Nginxのセットアップ




・Nginxのインストール
sudo dnf install -y nginx httpd-tools

・Nginxの設定ファイルインクルードディレクトリへ移動
cd /etc/nginx/conf.d/

・kibana用のconfファイル作成
vi kibana.conf

server {
    listen 80;

    server_name 192.168.56.101;

    auth_basic "Restricted Access";
    auth_basic_user_file /etc/nginx/.kibana-user;

    location / {
        proxy_pass http://127.0.0.1:5601;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

・basic認証を作成
sudo htpasswd -c /etc/nginx/.kibana-user kusomemo
→任意PW入力。※ここでは「tokyo」とします

ユーザ:kusomemo
PW:tokyo

・設定ファイルの確認
nginx -t

・nginxの自動起動
sudo systemctl enable nginx

・nginxのステータス確認
sudo systemctl status nginx

・nginxの起動
sudo systemctl start nginx

・nginxのステータス確認
sudo systemctl status nginx

logstashのセットアップ




・logstashの設定ディレクトリに移動
cd /etc/logstash/

・ヒープサイズの変更
vi jvm.options


-Xms512m
-Xmx512m


・設定ファイルのインクルードディレクトリに移動
cd /etc/logstash/conf.d/

・インプットポートの設定ファイル作成
vi input-beat.conf

input {
  beats {
    port => 5044
  }
}

・syslogフィルタconf作成
vi syslog-filter.conf

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}" ]
    }
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
  }
}

・elasticsearch向けoutputのconfファイル作成
vi output-elasticsearch.conf

output {
  elasticsearch { hosts => ["127.0.0.1:9200"]
    hosts => "127.0.0.1:9200"
    manage_template => false
    index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
    document_type => "%{[@metadata][type]}"
  }
}

・logstashの自動起動
sudo systemctl enable logstash

・logstashのステータス確認
sudo systemctl status logstash

・logstashの起動
sudo systemctl start logstash

・logstashのステータス確認
sudo systemctl status logstash

Filebeatのインストール





※この手順メモは別ノードにfilebeatをインストールする事を想定しています。
 同一ノードでの作業の場合、GPGキーのインストールからリポジトリの設定は既に実施済みの為、不要です。

・GPG-KEYのインストール
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

・ディレクトリの移動
cd /etc/yum.repos.d/

・リポジトリの設定
vi elasticsearch.repo


[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md


・filebeatのインストール
sudo dnf install -y filebeat

・filebeatの設定ディレクトリに移動
cd /etc/filebeat/

・設定ファイルの編集
vi filebeat.yml
→elasticsearch向けのディレクティブをコメントアウトし、
 logstash向けの設定を記述

#output.elasticsearch:
  # Array of hosts to connect to.
  #hosts: ["localhost:9200"]

output.logstash:
  # The Logstash hosts
  hosts: ["192.168.56.101:5044"]

・moduleが読み込めるか確認
filebeat modules list

・systemモジュールをenable
filebeat modules enable system

・ディレクトリの移動
cd /etc/filebeat/

・systemモジュールの編集
vi modules.d/system.yml
→var.pathを追記

  # Syslog
  syslog:
    enabled: true
    var.paths: ["/var/log/messages"]

  # Authorization logs
  auth:
    enabled: true
    var.paths: ["/var/log/secure"]

・filebeatの自動起動
sudo systemctl enable filebeat

・filebeatのステータス確認
sudo systemctl status filebeat

・filebeatの起動
sudo systemctl start filebeat

・filebeatのステータス確認
sudo systemctl status filebeat

動作確認





・ELKサーバにアクセス
http://192.168.56.101/

Username:kusomemo
PW:tokyo

kibanaのダッシュボードが表示されれば想定通りです。

もし表示されてなければ、転送・連携処理がうまくいってなかったり
サービスが起動していなかったりすると思いますので、
systemctlでelkやnginxが起動しているかどうか
ss -antでリッスンできているかどうかをご確認お願いいたします。

久しぶりにみてみると、モバイルバッテリーもずいぶん安くなってるんですね!

皆さん既にやってると思いますが、 AmazonPrimeだとAmazon Music Unlimitedが月額780円でできるんですね!
最近知ってapple musicから乗り換えました。(200円ですが安い方がいいに越したことはないです笑)

下のPythonの本は kindle unlimitedで無料で読めますのでお勧めです!(30日無料期間に読んで解約もアリだと思います。笑)



【tech】elk elastic search filebeatの設定中に出たエラー解決メモ



公開:2020/05/09
更新:2020/05/09

CentOS8にelk elastic stackのfilebeatをセットアップ中に出たエラーの解決方法のメモです。
elastic searchとlogstashとkibanaは先日からセットアップ済みで手順はまとめ中なのですが、先にfilebeatをセットアップしてました。filebeatもまとまり次第一緒に手順としてアップロードしたいと思っています!

インストール中に3つのエラーにハマったのでメモしておきます!

環境


OS:CentOS8
ログの転送先:logstash

エラーメッセージ①


Error initializing beat: error unpacking config data: more than one namespace configured accessing 'output' (source:'/etc/filebeat/filebeat.yml')

解決方法


filebeat.ymlファイルの編集
→ログの転送先を1か所に編集したら解決
 →下記の場合elastic searchとlogstash両方にoutputすることになっています。
 今回はlogstashにoutputしたいので、「output.elasticsearch」をコメントアウトします。




#-------------------------- Elasticsearch output ------------------------------
output.elasticsearch: ★この行をコメントアウト
#Array of hosts to connect to.
hosts: ["localhost:9200"]

#Protocol - either http (default) or https.
#protocol: "https"

#Authentication credentials - either API key or username/password.
#api_key: "id:api_key"
#username: "elastic"
#password: "changeme"

#----------------------------- Logstash output --------------------------------
output.logstash:
#The Logstash hosts
hosts: ["localhost:5044"]

#Optional SSL. By default is off.
#List of root certificates for HTTPS server verifications
#ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]

#Certificate for SSL client authentication
#ssl.certificate: "/etc/pki/client/cert.pem"

#Client Certificate Key
#ssl.key: "/etc/pki/client/cert.key"

#================================ Processors =====================================

原因


ログの転送先としてelastic searchとlogstashの両方が設定されていることが原因?
詳しくはオフィシャルドキュメントをご確認お願いいたします!

エラーメッセージ②


Error initializing beat: error loading config file: yaml: line 163: mapping values are not allowed in this context

解決方法


filebeat.ymlファイルの編集
→コメント行をコメントアウトしてしまっていた




#----------------------------- Logstash output --------------------------------
output.logstash:
** The Logstash hosts** ★この行をコメントアウト
hosts: ["localhost:5044"]

#Optional SSL. By default is off.
#List of root certificates for HTTPS server verifications
#ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]

#Certificate for SSL client authentication
#ssl.certificate: "/etc/pki/client/cert.pem"

#Client Certificate Key
#ssl.key: "/etc/pki/client/cert.key"


原因


コメント行も間違えてコメントアウトしてしまっていたせいで、設定行として認識されていたのかと思います。正しい原因は、こちらもオフィシャルのドキュメントをご確認ください

エラーメッセージ③


Exiting: 1 error: invalid config: yaml: line 7: did not find expected key
filebeat.service: Main process exited, code=exited, status=1/FAILURE
filebeat.service: Failed with result 'exit-code'.

filebeat.service: Start request repeated too quickly.
filebeat.service: Failed with result 'exit-code'.
Failed to start Filebeat sends log files to Logstash or directly to Elasticsearch..

解決方法


/etc/filebeat/modules.d/system.ymlファイルの編集
→列ずれを起こしていた。
→ymlファイルのなのでインデントに意味を持ちます。下記の太字の行のインデントを修正(上に合わせる)すれば解決しました



#Module: system
#Docs: https://www.elastic.co/guide/en/beats/filebeat/7.6/filebeat-module-system.html

- module: system
#Syslog
syslog:
enabled: true
var.paths: ["/var/log/messages"] ★この行のインデントを修正

\ #Set custom paths for the log files. If left empty,
\ #Filebeat will choose the paths depending on your OS.
\ #var.paths:

#Authorization logs
auth:
enabled: true 
var.paths: ["/var/log/secure"] ★この行を参考にインデントをそろえる
#Set custom paths for the log files. If left empty,
#Filebeat will choose the paths depending on your OS.
#var.paths:


原因


ymlファイルはインデントに意味があります。「enable:true」の行と「var.paths」の行頭をそろえてあげれば解決しました。

久しぶりにみてみると、モバイルバッテリーもずいぶん安くなってるんですね!

皆さん既にやってると思いますが、 AmazonPrimeだとAmazon Music Unlimitedが月額780円でできるんですね!
最近知ってapple musicから乗り換えました。(200円ですが安い方がいいに越したことはないです笑)

下のPythonの本は kindle unlimitedで無料で読めますのでお勧めです!(30日無料期間に読んで解約もアリだと思います。笑)