EACH(Elasticsearch Logstash + + Kibana)

1、ELKさんのプロフィール


1.1 ELKは何ですか


Elasticsearch検索エンジン分散オープンソースであり、その特徴は次のとおり、このような自動負荷探索などの分散、ゼロコンフィギュレーション、自動検出、自動スライスインデックス、インデックス複製機構、安らかスタイルインターフェイス、複数のデータソース、。


Logstashが完全にオープンソースのツールである、彼はあなたのログ、フィルタを収集し、(検索など)後で使用するためにそれを保存することができます。


KibanaはKibanaあなたは、まとめて分析し、重要なデータのログを検索することができますLogstashとElasticSearchフレンドリーWebインターフェイスのための分析を提供することができ、それを記録し、また、オープンソースとフリーのツールです。
 

1.2、ELKアプリケーション


電気プロバイダのアーキテクチャ
 

問題
1は、APIは同じではありません、私たちはどのように統合するつもりですか?- 「ダボ定義された均一なAPI仕様
2、操作は---サブシステム間のマーク(トラックユーザーの行動)を有する」ログ
3を、各サブシステムは、それぞれのログを生成するログ統合--- - 「logstash
。4 、AOPは、非同期ログ出力を埋葬しました

特定シナリオ1は、
サードパーティのプリペイド再入金を介して移動されます

ログ出力:毎回プリント非同期呼び出しのログ

 

分散ロードバランシング:

あまりにも多くのマシンが(このタスクを実行するために、マシンの比較的アイドル電流を選択するために、動的に)充電することができます

 

問題:

A:ブラザー、今日の助けに電話番号を確認してください138 001 380 000充電ロギング(成功)

B:待ち

5分後

 

A:方法について

B:待って、終了を確認していなかった3台のマシンを残します

 

結論:私たちは一緒にすべてのログを整理することができた場合、捜査に問題はないだろう

 

ソリューション:

  1. あなたは、データベースにログを置くことができます。

あまりにも多くのデータ、およびログなし標準のログ形式は、データベースプログラムが推奨されていない、と圧力が大きすぎます

  1. 大きなログを使用したデータ処理方式

コストが高すぎると、各システムログ規則の分散環境は同じではありません。

特定のビジネス慣行

ログ収集:Logstashの
ログストレージ:ElasticSearchの
ログショー:Kibana
台湾・サーバ・ログのが統一されていないが、視覚的な表示を容易にするために、検索ルールをご用意しております

概要

持参の分散問題:複数のノード、ロード・バランシング、ログの分散、高い運用・保守コスト(人物追跡が必要です)


1.3一元ログ管理システム


現在主流の集中ログ管理システムの一部


1、シンプル:のRsyslog


2.商業化:Splunkの


3.オープンソース:スクリーブ(フェイスブック)、Chukwa(アパッチ)


4、ELK最も広範(弾性スタック)(Java言語)


www.elastic.co/cn


1.4、ELK

ElasticSearch

ジャワ

リアルタイム検索および分析エンジンを配布し、彼はのために使用することができる全文検索、構造検索および分析、Luceneの。Solrの

Logstash

JRubyの

リアルタイムのチャネル容量データ収集入力フィルタ、出力モジュールを含むエンジンは、一般的に濾過モジュール内のログフォーマットを解析行います

Kibana

JavaScriptを

分析及び提供するElasticSerachプラットフォームの可視化のWeb プラットフォームを彼はElasticSerachインデックスの検索、通話データ、および寸法表の図のさまざまなを生成することができます

1.5ログ


ログ:実行中のトラックの録音プログラム---
レベル:ERROR、INFO、DEBUG、WARN
目的:外国企業のリンクを削除するために見つけるための簡単な情報とレコードの追加情報を見つけます

Filebeatはじめ
、あなたは何千もの顔何百も数十生成されたログサーバ、仮想マシンとコンテナの数千人の、それSSHください別れを持っている場合。Filebeatはシンプルなものが複雑されていないのでこと、軽量タイプの方法では、と要約ログファイルを転送するためにあなたを提供します。
またはLogstash Elasticsearchデータを送信するとき、Filebeatは、より大量のデータを考慮するために、敏感なプロトコルを背圧。Logstashがビジー状態のデータを処理する場合は、Filebeatは、読み出し速度を遅くするために知らせることができます。混雑が解消されると、Filebeatは元のペースに復元し、実行していきます。
どのような環境でも、常にアプリケーションの中断のリスクを潜んでいます。中断がある場合は、ログ行を読んで転送することができFilebeatは、すべての後に正常に戻ってなり、中断前の停止位置から続けています。
 

2.準備

2.1、インストールCentos7

メモリの2G以上が推奨されます

2.2、基本的な設定

 IPアドレスを設定

vi /etc/sysconfig/network-scripts/ifcfg-eno33

service network restart

ユーザーを追加し、許可

[root@localhost ~]# adduser elk1

[root@localhost ~]# passwd elk1

[root@localhost ~]# whereis sudoers

[root@localhost ~]# ls -l /etc/sudoers

[root@localhost ~]# chmod -v u+w /etc/sudoers

[root@localhost ~]# vi /etc/sudoers

## Allow root to run any commands anywher  
root    ALL=(ALL)       ALL  
linuxidc  ALL=(ALL)       ALL  #这个是新增的用户

[root@localhost ~]# chmod -v u-w /etc/sudoers

[root@localhost ~]# su elk1

3、ElasticSerach


3.1、Javaのインストール環境
 

インストールパッケージを抽出

[root@localhost jdk1.8]# tar -zxvf jdk-8u171-linux-x64.tar.gz

Java環境変数を設定します

[root@localhost jdk1.8.0_171]# vi /etc/profile

ファイルの追加

export JAVA_HOME=/home/elk1/jdk1.8/jdk1.8.0_171
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/LIB:$JRE_HOME/LIB:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
[root@localhost jdk1.8.0_171]# source /etc/profile
[root@localhost jdk1.8.0_171]# java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

3.2、ElasticSerachのスタンドアロンインストール

[root@localhost elasticserach]# tar -zxvf elasticsearch-6.3.1.tar.gz

[root@localhost elasticserach]# cd elasticsearch-6.3.1/bin

[root@localhost bin]# ./elasticsearch

[root@localhost bin]# su elk1
[elk1@localhost bin]$ ./elasticsearch

[root@localhost bin]# chown -R elk1:elk1 /home/elk1/elasticsearch

[elk1@localhost bin]$ ./elasticsearch

[elk1@localhost config]$ vi jvm.options

[elk1@localhost bin]$ ./elasticsearch

[root@localhost jdk1.8.0_171]# curl 127.0.0.1:9200

#后台启动
[elk1@localhost bin]$ ./elasticsearch -d

#关闭程序
[elk1@localhost bin]$ ps -ef|grep elastic

[elk1@localhost bin]$ kill 10097

#设置浏览器访问
[root@localhost bin]systemctl stop firewalld
[root@localhost bin]vi config/elasticsearch.yml

インストールの問題:

[1] [2]ソリューション

[root@localhost bin]# vi /etc/security/limits.conf

[3]ソリューション

[root@localhost bin]# vi /etc/sysctl.conf
[root@localhost bin]# sysctl -p

3.3、ElasticSerachクラスタのインストール

 設定ファイルを変更しますelasticserach.yml

vim /elasticsearch.yml
cluster.name: aubin-cluster#必须相同 
# 集群名称(不能重复)
node.name: els1(必须不同)
# 节点名称,仅仅是描述名称,用于在日志中区分(自定义)
#指定了该节点可能成为 master 节点,还可以是数据节点
	node.master: true
	node.data: true
path.data: /var/lib/elasticsearch
# 数据的默认存放路径(自定义)
path.logs: /var/log/elasticsearch 
# 日志的默认存放路径 
network.host: 192.168.0.1 
# 当前节点的IP地址 
http.port: 9200 
# 对外提供服务的端口
transport.tcp.port: 9300
#9300为集群服务的端口 
discovery.zen.ping.unicast.hosts: ["172.18.68.11", "172.18.68.12","172.18.68.13"] 
# 集群个节点IP地址,也可以使用域名,需要各节点能够解析 
discovery.zen.minimum_master_nodes: 2 
# 为了避免脑裂,集群节点数最少为 半数+1

注:空のデータとログデータ

192.168.14.12:9200/_cat/nodes?v

3.4、プラグインをインストールヘッド


プラグヘッドをダウンロード

wget https://github.com/mobz/elasticsearch-head/archive/elasticsearch-head-master.zip

YUMのgitをインストールします。また、仮定をダウンロードするにgitを使用することができます

unzip elasticsearch-head-master.zip

のNode.jsをインストールします

wget https://npm.taobao.org/mirrors/node/latest-v4.x/node-v4.4.7-linux-x64.tar.gz
tar -zxvf     node-v9.9.0-linux-x64.tar.gz

環境変数を追加するのNode.js

source /etc/profile

テスト

node -v 

npm -v

インストールイサキ(イサキは非常に便利なビルドツールです、あなたは圧縮パッケージ、テスト、実行などを作業することができます)

elasticsearchヘッドマスターに

npm install -g grunt-cli

npm install
(npm install -g cnpm --registry=https://registry.npm.taobao.org)

Elasticsearchの設定ファイルを変更し
、以下を追加し、elasticsearch-6.3.1 /設定/ elasticsearch.ymlを編集します:

http.cors.enabled: true
http.cors.allow-origin: "*"

修正Gruntfile.js(注「」)
新しいホスト名、次のプロパティを見つけることが、接続elasticsearchヘッドマスター/ Gruntfile.jsを開きます:「*」:

connect: {
        server: {
            options: {
                hostname: '*',
                port: 9100,
                base: '.',
                keepalive: true
            }
        }
}   

スタートelasticsearchヘッド

进入elasticsearch-head目录,执行命令:grunt server

背景開始elasticsearchヘッド

nohup grunt server &exit

閉鎖性頭部プラグ

ps -aux|grep head
kill 进程号

3.5、ElasticSerach API

elasticsearchのREST APIは、形式に従います。

curl -X<REST Verb> <Node>:<Port>/<Index>/<Type>/<ID>

バージョン情報ESをチェック

curl IP:9200

健康クラスタかどうかを確認してください

http://IP:9200/_cat/health?v

ノードのリストを表示

http://IP:9200/_cat/nodes?v

リストすべてのインデックスとストレージサイズ

http://IP:9200/_cat/indices?v

インデックスを作成します

curl -XPUT 'IP:9200/XX?pretty'

タイプを追加

curl -XPUT 'IP:9200/XX/external/2?pretty' -d '
{
   "gwyy": "John"
}'

更新の種類

curl -XPOST 'IP:9200/XX/external/1/_update?pretty' -d '
{
   "doc": {"name": "Jaf"}
}'

指定したインデックスを削除

curl -XDELETE 'IP:9200/_index?pretty'

3.6、構成の詳細

ElasticSearch.yml Lは、
関連する構成をES
 

# 集群的名字,以此作为是否同一集群的判断条件
cluster.name: elasticsearch
# 节点名字,以此作为集群中不同节点的区分条件
node.name: node-1
#设置当前节点既可以为主节点也可以为数据节点
node.master: true
node.data: true
# 索引分片个数,默认为5片
#index.number_of_shards: 5
# 索引副本个数,默认为1个副本
#index.number_of_replicas: 1
# 数据存储目录(多个路径用逗号分隔)
discovery.zen.ping.unicast.hosts: ["192.168.14.14","192.168.14.15"]
discovery.zen.minimum_master_nodes: 2
#数据目录
path.data: /home/elk1/elasticserach/data
# 日志目录
path.logs: /home/elk1/elasticserach/logs
# 修改一下ES的监听地址,这样别的机器才可以访问
network.host: 192.168.14.13
# 设置节点间交互的tcp端口(集群),默认是9300
transport.tcp.port: 9300
# 监听端口(默认的就好)
http.port: 9200
# 增加新的参数,这样head插件才可以访问es
http.cors.enabled: true
http.cors.allow-origin: "*"

Jvm.optionsリットル
JVMの設定

Log4j2.propertiesの
ログ設定
 

3.7、Elasticserachモード

開発と生産は二つのモードに分かれて
区別する方法

以transport的地址是否绑定在localhost为标准(实际地址)
即:elasticserach.yml文件中的network.host配置

モードの違い
(1)あなたは、次の開発モード例外を起動したときに警告が構成チェックのために要求されます
プロダクションモードの下で(2)の意志起動例外と起動時に迅速な方法エラーの構成チェック
 

3.8、elasticserach操作

基本的な概念
ドキュメント:ドキュメントオブジェクト
インデックス:インデックス(ライブラリ)
タイプ:データ型指数(表)
フィールド,:フィールド、文書のプロパティ(フィールド)
クエリDSL:クエリ構文(SQL)
CRUD操作
文書の作成
要求を:

POST /newbies/student/1
{
"name":"zhangsan",
"clazz":"0115bigdata",
"description":"we are family"
}

戻り値:

{
  "_index": "newbies",
  "_type": "student",
  "_id": "1",
  "_version": 1,
  "result": "created",
  "_shards": {
    "total": 2,
    "successful": 2,
    "failed": 0
  },
  "_seq_no": 0,
  "_primary_term": 1
}

ドキュメントの取得
要求を:

GET newbies/student/1

戻り値:

{
  "_index": "newbies",
  "_type": "student",
  "_id": "1",
  "_version": 1,
  "found": true,
  "_source": {
    "name": "zhangsan",
    "clazz": "0115bigdata",
    "description": "we are family"
  }
}

ドキュメントの更新
要求を:

POST /newbies/student/1/_update
{
"doc":{
"description":"hello world"
}
}

戻り値:

{
  "_index": "newbies",
  "_type": "student",
  "_id": "1",
  "_version": 2,
  "result": "updated",
  "_shards": {
    "total": 2,
    "successful": 2,
    "failed": 0
  },
  "_seq_no": 1,
  "_primary_term": 1
}

ドキュメントの削除
要求を:

DELETE newbies/student/1

クエリ結果:

{
  "_index": "newbies",
  "_type": "student",
  "_id": "1",
  "found": false
}

Elasticserachクエリ
クエリ文字列

GET /newbies/student/_sea'rch?q=关键字

戻り値:

{
  "took": 8,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 0.2876821,
    "hits": [
      {
        "_index": "newbies",
        "_type": "student",
        "_id": "1",
        "_score": 0.2876821,
        "_source": {
          "name": "zhangsan",
          "clazz": "0115bigdata",
          "description": "we are family"
        }
      }
    ]
  }
}

クエリDSL

GET newbies/student/_search
{
  "query":{
    "term":{
      "name":{
          "value":"zhangsan"
        
      }
    } 
  }
}

4、Logstash

4.1、logstashインストール

[root@localhost logstash]# tar -zxvf logstash-6.3.1.tar.gz
[root@localhost logstash-6.3.1]# cd config
[root@localhost config]# vi log4j_to_es.conf

input {
        file {
                path=>[""]
                type=>""
                start_position=>"beginning"
        }
}
output {
        stdout {
                codec=>rubydebug
        }
}
[root@localhost logstash-6.3.1]# ./bin/logstash -f config/log4j_to_es.conf

4.2、入力、出力、フィルタ

入力

input{file{path=>”/tomcat/logs/abc.log”}}

出力

output{stdout{codec=>rubydebug}} 

フィルタを挿入し
GROK
。1、正規表現に基づいた豊富な再利用可能なパターン(模様)を提供し
、この構造に基づいて2を、非構造化データ処理することができ
日付
変換タイムスタンプフィールドタイプの文字列型、その後のデータ処理を容易にするために
のmutate
、追加の修正、削除、および他のフィールドは、交換プロセスに関連
 

4.3、logstashフォーマットnginxのログ内容

nginx_logstash.confファイルの作成

input {
  stdin { }
}

filter {
  grok {
    match => {
      "message" => '%{IPORHOST:remote_ip} - %{DATA:user_name} \[%{HTTPDATE:time}\] "%{WORD:request_action} %{DATA:request} HTTP/%{NUMBER:http_version}" %{NUMBER:response} %{NUMBER:bytes} "%{DATA:referrer}" "%{DATA:agent}"'
    }
  }

  date {
    match => [ "time", "dd/MMM/YYYY:HH:mm:ss Z" ]
    locale => en
  }

  geoip {
    source => "remote_ip"
    target => "geoip"
  }

  useragent {
    source => "agent"
    target => "user_agent"
  }
}

output {
stdout {
 codec => rubydebug
 }
}

Logstashはファイルnginxの解析を開始
ヘッドを-n 2 /home/elk1/nginx_logs|./logstash -f ../config/nginx_logstash.conf
リットル結果
 

{
         "user_name" => "-",
          "referrer" => "-",
        "@timestamp" => 2015-05-17T08:05:32.000Z,
           "request" => "/downloads/product_1",
              "time" => "17/May/2015:08:05:32 +0000",
             "geoip" => {
         "country_code3" => "NL",
             "longitude" => 4.8995,
        "continent_code" => "EU",
              "latitude" => 52.3824,
              "timezone" => "Europe/Amsterdam",
         "country_code2" => "NL",
                    "ip" => "93.180.71.3",
          "country_name" => "Netherlands",
              "location" => {
            "lat" => 52.3824,
            "lon" => 4.8995
        }
    },
          "@version" => "1",
      "http_version" => "1.1",
         "remote_ip" => "93.180.71.3",
           "message" => "93.180.71.3 - - [17/May/2015:08:05:32 +0000] \"GET /downloads/product_1 HTTP/1.1\" 304 0 \"-\" \"Debian APT-HTTP/1.3 (0.8.16~exp12ubuntu10.21)\"",
             "bytes" => "0",
        "user_agent" => {
          "minor" => "3",
             "os" => "Debian",
           "name" => "Debian APT-HTTP",
        "os_name" => "Debian",
          "build" => "",
          "major" => "1",
         "device" => "Other"
    },
             "agent" => "Debian APT-HTTP/1.3 (0.8.16~exp12ubuntu10.21)",
              "host" => "localhost.localdomain",
          "response" => "304",
    "request_action" => "GET"
}

5、Kibana
5.1、Kibana安装
 

[root@localhost kibana]# tar -zxvf kibana-6.3.1-linux-x86_64.tar.gz
[root@localhost kibana]# cd kibana-6.3.1-linux-x86_64/config
[root@localhost config]# vi kibana.yml

[root@localhost bin]# ./kibana

5.2、kibana配置


設定ファイルのConfigurationフォルダ
Kibana.yml一般的な設定手順
 

Server.host/server.port:访问的端口号和地址(地址设置后才能被外网访问)

Elasticsearch.url:访问elasticserach的地址

5.3、kibanaの特長

Discover:数据搜索查看
Visualize:图标制作
Dashboard:仪表盘制作
Timeline:时序数据的高级可视化分析
DevTools:开发者工具
Management:kibana相关配置

6、Filebeat和はpacketbeat
6.1、Filebeatを


ダウンロードFilebeat
https://www.elastic.co/cn/downloads/beats/filebeat 
getconf LONG_BIT:システムの中央値を表示

2.2、Packetbeat


Packetbeat概要
クロールネットワークパケット(1)リアルタイム
(2)自動的にアプリケーション層プロトコル(キャプチャ)解析
等DNS、HTTP、Redisのは、MySQL、
Packetbeatクロールelasticserach要求データ
(1)packetbeatディレクトリに入り、ファイルes.ymlを作成
(2)ファイル編集es.yml
 

packetbeat.interfaces.device: ens33#网卡

packetbeat.protocols.http:
ports: [9200]#es端口
send_request: true#抓取请求信息
include_body_for: ["application/json", "x-www-form-urlencoded"]#包含内容
output.console:
pretty: true#控制台输出

(3)スタートpacketbeat

sudo ./packetbeat -e -c es.yml -strict.perms=false

7、nginxの

    安装nginx
#安装依赖环境
yum install gcc-c++
yum install pcre-devel
yum install zlib zlib-devel
yum install openssl openssl-deve
#//一键安装上面四个依赖
#yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel

#解压
tar -xvf nginx-1.13.7.tar.gz

#进入nginx目录
cd /usr/local/nginx  #执行命令

./configure

#执行make命令make//执行make install命令
make
make install
//启动命令
nginx/sbin/nginx
//停止命令
nginx/sbin/nginx -s stop或者 : nginx -s quit
    //重启命令
    nginx -s reload

図8に示すように、実際のデータの可視化デモ

8.1、実際の説明

要件:

コレクションクエリElasticserachクラスタ

一般的なクエリステートメント、応答および長期の分析

 

スキーム

データ収集:Packetbeat + logstash

データ分析:Kibana + Elasticsearch

 

8.2、準備

	Production Cluster(生产环境)
1、Elasticsearch 192.168.14.13:9200
2、Kibana 192.168.14.15:5601
	Monitoring Cluster(监控环境)
1、Elasticsearch 192.168.14.16:8200
2、Kibana 192.168.14.16:8601
	Logstash\packetbeat

8.3、戦闘

      データクラスタの収集を開始

スタートES:

./elasticsearch

設定kibanaを変更

./kibana    #启动

データ解析クラスタ起動
(1)ES開始
同上
(2)スタートlogstashを
 

input {
    beats {
        port => 5044
    }
}
filter {
    if "search" in [request]{
        grok {
            match => { "request" => ".*\n\{(?<query_body>.*)"}
        }
        grok {
            match => { "path" => "\/(?<index>.*)\/_search"}
        }
     if [index] {
      } else {
            mutate {
              add_field  => { "index" => "All" }
        }
      }

      mutate {
              update  => { "query_body" => "{%{query_body}"}}
      }

  #    mutate {
  #        remove_field => [ "[http][response][body]" ]
  #    }
}

output {
  #stdout{codec=>rubydebug}

  if "search" in [request]{
        elasticsearch {
        hosts => "127.0.0.1:9200"
        }
   }
}

(3)スタート

./bin/logstash -f config/log4j_to_es.conf
附录:防火墙配置
1、firewalld的基本使用
启动: systemctl start firewalld
关闭: systemctl stop firewalld
查看状态: systemctl status firewalld 
开机禁用  : systemctl disable firewalld
开机启用  : systemctl enable firewalld
 
2.systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。
启动一个服务:systemctl start firewalld.service
	关闭一个服务:systemctl stop firewalld.service
	重启一个服务:systemctl restart firewalld.service
	显示一个服务的状态:systemctl status firewalld.service
	在开机时启用一个服务:systemctl enable firewalld.service
	在开机时禁用一个服务:systemctl disable firewalld.service
	查看服务是否开机启动:systemctl is-enabled firewalld.service
	查看已启动的服务列表:systemctl list-unit-files|grep enabled
	查看启动失败的服务列表:systemctl --failed
3.配置firewalld-cmd
查看版本: firewall-cmd --version
查看帮助: firewall-cmd --help
显示状态: firewall-cmd --state
查看所有打开的端口: firewall-cmd --zone=public --list-ports
更新防火墙规则: firewall-cmd --reload
查看区域信息:  firewall-cmd --get-active-zones
查看指定接口所属区域: firewall-cmd --get-zone-of-interface=eth0
拒绝所有包:firewall-cmd --panic-on
取消拒绝状态: firewall-cmd --panic-off
查看是否拒绝: firewall-cmd --query-panic
 
4.那怎么开启一个端口呢
添加
firewall-cmd --zone=public --add-port=80/tcp --permanent    (--permanent永久生效,没有此参数重启后失效)
重新载入
firewall-cmd --reload
查看
firewall-cmd --zone= public --query-port=80/tcp
删除
firewall-cmd --zone= public --remove-port=80/tcp --permanent

 

公開された322元の記事 ウォン称賛46 ビュー110 000 +

おすすめ

転載: blog.csdn.net/qq_31784189/article/details/105206251