DockerインストールElasticsearch+kibana+filebeat(7.3.1)

6787 ワード

elkについての紹介はこちらではあまり言いませんが、前に紹介したことがあります.私のこの文章は現在の私たちの会社の業務量が大きくない状況に対応するために構築されたログ収集システムです.

一、Elasticsearchのインストール


公式サイトhttps://www.elastic.co
dockerをインストールします.ここでは言いません.
公式サイトからelasticsearchミラーを引く
[root@devon ~]# docker pull docker.elastic.co/elasticsearch/elasticsearch:7.3.1
[root@devon ~]# docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node"docker.elastic.co/elasticsearch/elasticsearch:7.3.1

二、kibanaのインストール


kibanaミラーを引く
[root@devon ~]# docker pull docker.elastic.co/kibana/kibana:7.3.1
開始
[root@devon ~]# docker run --name kibana -d -p 5601:5601 -e ELASTICSEARCH_HOSTS=http://192.168.10.8:9200 kibana:7.3.1
[root@devon ~]# docker run --name kibana -d -p 5601:5601 -e ELASTICSEARCH_HOSTS=http://192.168.10.8:9200 kibana:7.3.10e07e9d646fe3e0786e434d2b97a813dac9c17cbd2ea664e0e5151dc4c4d4417[root@devon ~]# docker ps -a
CONTAINER ID        IMAGE                                                 COMMAND                  CREATED             STATUS            
0e07e9d646fe        kibana:7.3.1                                          "/usr/local/bin/du..."   8 seconds ago       Up 7 seconds      
400f07c09c01        docker.elastic.co/elasticsearch/elasticsearch:7.3.1   "/usr/local/bin/do..."   6 hours ago         Up 6 hours

アクセスkibana IP+5601
次にfilebeatを利用してログを収集しましょう
[root@devon ~]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.4-linux-x86_64.tar.gz
[root@devon ~]# tar -zxf filebeat-6.2.4-linux-x86_64.tar.gz -C/data/
[root@devon ~]# mv/data/filebeat-6.2.4-linux-x86_64//data/filebeat-6.2.4
[root@devon ~]# vim/data/filebeat-6.2.4/filebeat.yml
どのようにfilebeatを利用して複数のインデックスを設定して、ログを検索するのに便利ですか?私はカスタムfilebeatを選択します.ymlファイル
以下は私が簡単に収集した3つのJavaサービスのログです.デフォルトテンプレートを変更することもできます.logstashがインストールされている場合、フォーマットを変更する必要があります.分析ログのフォーマットは一般的に開発されます.彼らは特殊な要求フォーマットがあれば、他のフォーマットもjsonフォーマットファイルや他のフォーマットです.
filebeat.prospectors:
- input_type: log
  paths:
    - /var/java/ivy-byways-service/logs/catalina.out
  fields:
    type: "byways"
  multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
  multiline.negate: true
  multiline.match: after
  multiline.timeout: 10s
- input_type: log
  paths:
    - /var/java/ivy-gotobus-hotels-web/logs/catalina.out
  fields:
    type: "gotobus"
  multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
  multiline.negate: true
  multiline.match: after
  multiline.timeout: 10s

- input_type: log
  paths:
    - /var/java/ivy-hotels-service/logs/catalina.out
  fields:
    type: "hotels"
  multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
  multiline.negate: true
  multiline.match: after
  multiline.timeout: 10s
- input_type: log
  paths:
    - /var/java/ivy-newsletter-service/logs/catalina.out
  fields:
    type: "newsletter"
  multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
  multiline.negate: true
  multiline.match: after
  multiline.timeout: 10s
- input_type: log
  paths:
    - /var/java/ivy-taketours-hotels-web/logs/catalina.out
  fields:
    type: "taketours"
  multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
  multiline.negate: true
  multiline.match: after
  multiline.timeout: 10s
  #json.message_key: log
  #json.keys_under_root: true
output.elasticsearch:
  hosts: ["172.31.60.50:9200"]
  #index: "logs-%{[beat.version]}-%{+yyyy.MM.dd}"
  indices:
    - index: "byways-service-log"
      when.equals:
        fields.type: "byways"
    - index: "gotobus-hotels-web-log"
      when.equals:
        fields.type: "gotobus"
    - index: "hotels-service-log"
      when.equals:
        fields.type: "hotels"
    - index: "newsletter-service-log"
      when.equals:
        fields.type: "newsletter"
    - index: "taketours-hotels-web-log"
      when.equals:
        fields.type: "taketours"

filebeat.ymlはfilebeatのプライマリプロファイルです
ファイルを開き、multilineを検索します.デフォルトはコメントで、一般的には次の3つの構成があります.
multiline:
pattern: '^[0-2][0-9]:[0-5][0-9]:[0-5][0-9]'
negate: true
match: after

時間形式で始まる行を前の行の末尾にマージしない(正則が悪いので無視)
pattern:正規表現
negate:trueまたはfalse;デフォルトはfalseで、patternに一致する行が前の行にマージされます.true、patternに一致しない行を前の行にマージ
match:afterまたはbefore、前の行の末尾または先頭にマージ
さらに2つの構成があり、デフォルトではコメントされています.特に要求はありません.
max_lines: 500
timeout: 5s

max_lines:最大行をマージし、デフォルト500
timeout:1回のマージイベントのタイムアウト時間、デフォルト5 s、マージに多くの時間を費やしたり、詰まったりすることを防止します.elasticsearch-headプラグインを使用してクラスタを管理している場合は、elasticsearch-headデフォルト9100ポートが表示されます.ポートの衝突を避けるために変更しました.オンラインであれば、これを使って管理する必要もありません.自分のニーズを見てみましょう.
kibanaとelasticsearchインデックスを利用して上の図は私の6.8.2バージョンのkinbanaで、今の7.3.1までほとんど違いがありません
次に、ビジュアルグラフィックを作成しましょう.7.3.1バージョンの作成チャートは少し変更されました.自分のニーズに合わせて異なるスタイルのグラフを作成することができます.ここではまずlineグラフを作成して、作成したいインデックスをクリックします.
kibanaの他の機能については自分で検討しましょう.
このようなアーキテクチャが満たされなければelk+kafaka+zookeeperなどに変えることもできます
クラスタモードの場合は、クラスタを管理する2つのプラグインを紹介できます.
Cereboはkopfのes 5上の代替者であり,webインタフェースを介してelasticsearchクラスタ状態情報を管理し監視する
bigdesk統計分析とelasticsearchクラスタ状態情報のグラフ化

ESデータ定期削除


ESデータを削除しないと、ESに格納されているデータが多くなり、ディスクがいっぱいになると新しいデータを書き込めなくなります.この場合、スクリプトタイミングを使用して期限切れのデータを削除できます.
#/bin/bash
#es-index-clear
#   7       
LAST_DATA=`date -d "-7 days" "+%Y.%m.%d"`
#           
curl -XDELETE 'http://ip:port/*-'${LAST_DATA}'*'

個人の状況に応じて保留日数を調整できますが、ここのipとportは同じようにデータを格納しないマシンに設定されています.このスクリプトはESで1台のマシンでタイミングよく実行するだけです.次にcrontab crontab-eを呼び出してタイミングタスクを追加します.
0 1 * * * /root/cron/del_es.sh

毎日午前1時にインデックスをクリアします.
es-index-clear.shコンテンツは、以下のように、他の優れたコードに変更されます.
#!/bin/bash

###################################
#       ES     
###################################
function delete_indices() {
    comp_date=`date -d "10 day ago" +"%Y-%m-%d"`
    date1="$1 00:00:00"
    date2="$comp_date 00:00:00"

    t1=`date -d "$date1" +%s` 
    t2=`date -d "$date2" +%s` 

    if [ $t1 -le $t2 ]; then
        echo "$1    $comp_date,      "
        #      ,   2017-10-01     2017.10.01
        format_date=`echo $1| sed 's/-/\./g'`
        curl -XDELETE http://127.0.0.1:9200/*$format_date
    fi
}

curl -XGET http://127.0.0.1:9200/_cat/indices | awk -F" " '{print $3}' | awk -F"-" '{print $NF}' | egrep "[0-9]*\.[0-9]*\.[0-9]*" | sort | uniq  | sed 's/\./-/g' | while read LINE
do
    #        
    delete_indices $LINE
done

次の2つのシナリオはネット上で参考にして、みんなが一緒に研究を学ぶことを歓迎します.