ELK搭建

ELK

“ELK”是三個開源項目的首字母縮寫,這三個項目分別是:Elasticsearch、Logstash 和 Kibana。Elasticsearch 是一個搜索和分析引擎。Logstash 是服務(wù)器端數(shù)據(jù)處理管道,能夠同時從多個來源采集數(shù)據(jù),轉(zhuǎn)換數(shù)據(jù),然后將數(shù)據(jù)發(fā)送到諸如 Elasticsearch 等“存儲庫”中。Kibana 則可以讓用戶在 Elasticsearch 中使用圖形和圖表對數(shù)據(jù)進(jìn)行可視化。

Elasticsearch,則在NOSQL中已經(jīng)做了詳細(xì)的解釋說明,并提供了單點集群,和多點集群的搭建方式。具體的內(nèi)容可查看中間件文集中。以下從Logstash 開始談起。

1. Logstash

Logstash 是一個開源的數(shù)據(jù)收集引擎,可以收集不同地方的數(shù)據(jù)。以下是借用官網(wǎng)的說明:

Logstash is an open source data collection engine with real-time pipelining capabilities. Logstash can dynamically unify data from disparate sources and normalize the data into destinations of your choice. Cleanse and democratize all your data for diverse advanced downstream analytics and visualization use cases.

While Logstash originally drove innovation in log collection, its capabilities extend well beyond that use case. Any type of event can be enriched and transformed with a broad array of input, filter, and output plugins, with many native codecs further simplifying the ingestion process. Logstash accelerates your insights by harnessing a greater volume and variety of data.


9.png

1.1 工作原理

Logstash 的時間處理分為三個階段:輸入->過濾器->輸出。


10.png

輸入:支持多種的輸入,例如:文件、TCP、UDP、HTPP、Redis、Kafka、log4j、websocket 、JDBC等等。

輸出:同樣支持多個格式,例如:文件、CSV、email、Kafka、ElasticSearch、http、Redis、mongodb、websocket 等等。

過濾:一般不需要,詳細(xì)可查閱官網(wǎng)。

最后選擇ElasticSearch做數(shù)據(jù)的輸出端因為它具備以下功能:

  1. 支持高并發(fā)
  2. 支持海里的數(shù)據(jù)查詢
  3. 與Kibana 結(jié)合設(shè)置過期策略
  4. 全文索引

1.2 日志的拉取

日志的拉取模式一般用于第三方的服務(wù)上面,例如:mysql,nginx,等等。

實現(xiàn)方式:修改配置文件,在配置文件中添加日志的路徑。

文件類型:可以收集多個不同的文件夾下的文件,服務(wù)器宕機(jī)后重新的打開也不會重復(fù)收集。

以下為:logstash.conf

# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.

input {
 file {
 path => "/home/public/*log.log"
   start_position => beginning
    }
 file {
 path => "/home/public/*log.text"
   start_position => beginning
    }
}
output {
  elasticsearch {
    hosts => ["IP:9200"]
    #索引名稱小寫
    index => "filelog"
    #user => "elastic"
    #password => "123456"
  }
}

啟動方式:以docker 為例子,以下的所有啟動方式可參考。

logstash.yml 文件,注意它是連接elasticsearch的文件。

http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://IP:9200" ]

docker 啟動命令:

docker run --rm -it --privileged=true -p 9600:9600  -d -v /logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf -v /logstash/log/:/home/public/  -v /logstash/logstash.yml:/usr/share/logstash/config/logstash.yml logstash:7.2.0

注意:

  1. 要把log文件夾掛載出來。
  2. 掛載文件夾的權(quán)限是777。

然后在Kibana 中創(chuàng)建模板查看。

1.3 程序的推送

程序的推送效率高,這個模式是Logstash提供了一個長連接的端口。

實現(xiàn)方式:修改配置文件.

以下為:tcp.conf

input {
 tcp{
 port => 9600
 type => "TcpLog"
 }
}
output {
  elasticsearch {
    hosts => ["IP:9200"]
    index => "tcplog"
  }
}

缺點:在高并發(fā)的時候?qū)ogstash的壓力比較大,所以就有了下面的兩種方式,先緩存到redis 或是kafka中,然后在到Logstash中。

1.4 Redis

這個模式是Logstash主動的去連接Redis去獲取數(shù)據(jù)。

實現(xiàn)方式:修改配置文件.

以下為:redis.conf

input {
    redis {
        codec => plain
        host => "IP"
        port => 6379
        data_type => list
        key => "listlog"
        db => 0
    }
}
output {
  elasticsearch {
    hosts => ["IP:9200"]
    index => "redislog"
  }
}

注意:Logstash當(dāng)把Redis中數(shù)據(jù)收集完成后,會刪除Redis中收集過的數(shù)據(jù),防止Redis宕機(jī)后,重復(fù)收集。

1.5 Kafka

這個模式是Logstash主動的去連接Kafka去獲取數(shù)據(jù)。

實現(xiàn)方式:修改配置文件.

以下為:kafka.conf

input {
     kafka {
      topics => "kafkalog"
      bootstrap_servers => "IP:9092"  # 從kafka的leader主機(jī)上提取緩存
      codec => "json"  # 在提取kafka主機(jī)的日志時,需要寫成json格式
            }
}
output {
  elasticsearch {
    hosts => ["IP:9200"]
    index => "kafkalog"
  }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容