ELK進行服務日志收集的簡單實踐

ELK基本信息

ELK是三個開源軟件的縮寫嬉荆,分別表示:Elasticsearch , Logstash, Kibana , 它們都是開源軟件。
Elasticsearch是個開源分布式搜索引擎酷含,提供搜集鄙早、分析汪茧、存儲數據三大功能。它的特點有:分布式蝶锋,零配置陆爽,自動發(fā)現(xiàn),索引自動分片扳缕,索引副本機制慌闭,restful風格接口,多數據源躯舔,自動搜索負載等驴剔。
Logstash 主要是用來日志的搜集、分析粥庄、過濾日志的工具丧失,支持大量的數據獲取方式。一般工作方式為c/s架構惜互,client端安裝在需要收集日志的主機上布讹,server端負責將收到的各節(jié)點日志進行過濾、修改等操作在一并發(fā)往elasticsearch上去训堆。
Kibana 也是一個開源和免費的工具描验,Kibana可以為 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以幫助匯總坑鱼、分析和搜索重要數據日志膘流。

官方文檔

Logstash:
https://www.elastic.co/cn/products/logstash
https://www.elastic.co/guide/en/logstash/current/index.html
Kibana:
https://www.elastic.co/cn/products/kibana
https://www.elastic.co/guide/en/kibana/current/index.html
Elasticsearch:
https://www.elastic.co/cn/products/elasticsearch
https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
elasticsearch中文社區(qū):
https://elasticsearch.cn/

Elasticsearch

Near Realtime (NRT)

Elasticsearch是一個近乎實時的搜索平臺。這意味著從索引文檔到可以搜索的時間只有輕微的延遲(通常是1秒)鲁沥。

Cluster

集群是一個或多個節(jié)點(服務器)的集合呼股,它們共同保存你的整個數據,并提供跨所有節(jié)點的聯(lián)合索引和搜索功能画恰。一個集群由一個唯一的名稱標識彭谁,默認這個唯一標識的名稱是"elasticsearch"。這個名稱很重要允扇,因為如果節(jié)點被設置為按其名稱加入集群缠局,那么節(jié)點只能是集群的一部分。
確保不要在不同的環(huán)境中用相同的集群名稱蔼两,否則可能導致節(jié)點加入到錯誤的集群中。例如逞度,你可以使用"logging-dev", "logging-test", "logging-prod"分別用于開發(fā)额划、測試和正式集群的名字。

Node

節(jié)點是一個單獨的服務器档泽,它是集群的一部分俊戳,存儲數據揖赴,并參與集群的索引和搜索功能。就像集群一樣抑胎,節(jié)點由一個名稱來標識燥滑,默認情況下,該名稱是在啟動時分配給節(jié)點的隨機通用唯一標識符(UUID)阿逃。如果不想用默認的節(jié)點名铭拧,可以定義任何想要的節(jié)點名。這個名稱對于管理來說很重要恃锉,因為你希望識別網絡中的哪些服務器對應于你的Elasticsearch集群中的哪些節(jié)點搀菩。
一個節(jié)點可以通過配置集群名稱來加入到一個特定的集群中。默認情況下破托,每個節(jié)點都被設置加入到一個名字叫"elasticsearch"的集群中肪跋,這就意味著如果你啟動了很多個節(jié)點,并且假設它們彼此可以互相發(fā)現(xiàn)土砂,那么它們將自動形成并加入到一個名為"elasticsearch"的集群中州既。
一個集群可以有任意數量的節(jié)點。此外萝映,如果在你的網絡上當前沒有運行任何節(jié)點吴叶,那么此時啟動一個節(jié)點將默認形成一個單節(jié)點的名字叫"elasticsearch"的集群。

Index

索引是具有某種相似特征的文檔的集合锌俱。例如晤郑,你可以有一個顧客數據索引,產品目錄索引和訂單數據索引贸宏。索引有一個名稱(必須是小寫的)標識造寝,該名稱用于在對其中的文檔執(zhí)行索引、搜索吭练、更新和刪除操作時引用索引诫龙。

Document

文檔是可以被索引的基本信息單元。文檔用JSON表示鲫咽。

Shards & Replicas

一個索引可能存儲大量數據签赃,這些數據可以超過單個節(jié)點的硬件限制。例如分尸,一個包含10億條文檔占用1TB磁盤空間的索引可能不適合在單個節(jié)點上锦聊,或者可能太慢而不能單獨處理來自單個節(jié)點的搜索請求。
為了解決這個問題箩绍,Elasticsearch提供了將你的索引細分為多個碎片(或者叫分片)的能力孔庭。在創(chuàng)建索引時,可以簡單地定義所需的分片數量。每個分片本身就是一個功能完全獨立的“索引”圆到,可以駐留在集群中的任何節(jié)點上怎抛。
分片之所以重要,主要有兩個原因:
它允許你水平地分割/擴展內容卷
它允許你跨分片(可能在多個節(jié)點上)分布和并行操作芽淡,從而提高性能和吞吐量
在一個網絡/云環(huán)境中隨時都有可能出現(xiàn)故障马绝,強烈推薦你有一個容災機制。Elasticsearch允許你將一個或者多個索引分片復制到其它地方挣菲,這被稱之為副本富稻。
復制之所以重要,有兩個主要原因:
它提供了在一個shard/node失敗是的高可用性己单。出于這個原因唉窃,很重要的一個點是一個副本從來不會被分配到與它復制的原始分片相同節(jié)點上。也就是說纹笼,副本是放到另外的節(jié)點上的纹份。
它允許擴展搜索量/吞吐量,因為搜索可以在所有副本上并行執(zhí)行廷痘。
總而言之蔓涧,每個索引都可以分割成多個分片。索引也可以被復制零(意味著沒有副本)或更多次笋额。一旦被復制元暴,每個索引都將具有主分片(被復制的原始分片)和副本分片(主分片的副本)。在創(chuàng)建索引時兄猩,可以為每個索引定義分片和副本的數量茉盏。創(chuàng)建索引后,您可以隨時動態(tài)地更改副本的數量枢冤,但不能更改事后分片的數量鸠姨。
在默認情況下,Elasticsearch中的每個索引都分配了5個主分片和1個副本淹真,這意味著如果集群中至少有兩個節(jié)點讶迁,那么索引將有5個主分片和另外5個副本分片(PS:這5個副本分片組成1個完整副本),每個索引總共有10個分片核蘸。

Kibana

Kibana是一個Web應用程序巍糯,你可以通過5601來訪問它。例如:localhost:5601 或者 http://YOURDOMAIN.com:5601
當訪問Kibana時客扎,默認情況下祟峦,Discover頁面加載時選擇了默認索引模式。時間過濾器設置為最近15分鐘徙鱼,搜索查詢設置為match-all(*)

Logstash

Logstash是一個開源的服務器端數據處理管道宅楞,可以同時從多個數據源獲取數據,并對其進行轉換,然后將其發(fā)送到你最喜歡的“存儲”咱筛。(當然,我們最喜歡的是Elasticsearch)

輸入:采集各種樣式杆故、大小和來源的數據

image.png

過濾器:實時解析和轉換數據

數據從源傳輸到存儲庫的過程中迅箩,Logstash 過濾器能夠解析各個事件,識別已命名的字段以構建結構处铛,并將它們轉換成通用格式饲趋,以便更輕松、更快速地分析和實現(xiàn)商業(yè)價值撤蟆。

Logstash 能夠動態(tài)地轉換和解析數據奕塑,不受格式或復雜度的影響:

  • 利用 Grok 從非結構化數據中派生出結構
  • 從 IP 地址破譯出地理坐標
  • 將 PII 數據匿名化,完全排除敏感字段
  • 整體處理不受數據源家肯、格式或架構的影響
image.png

輸出:選擇你的存儲龄砰,導出你的數據

盡管 Elasticsearch 是我們的首選輸出方向,能夠為我們的搜索和分析帶來無限可能讨衣,但它并非唯一選擇换棚。Logstash 提供眾多輸出選擇,您可以將數據發(fā)送到您要指定的地方反镇,并且能夠靈活地解鎖眾多下游用例固蚤。

安裝Logstash

可以直接從官網上下載安裝包(Java環(huán)境需要JDK),也可以使用docker鏡像

首先歹茶,讓我們通過最基本的Logstash管道來測試一下剛才安裝的Logstash

Logstash管道有兩個必需的元素夕玩,輸入和輸出,以及一個可選元素過濾器惊豺。輸入插件從數據源那里消費數據燎孟,過濾器插件根據你的期望修改數據,輸出插件將數據寫入目的地扮叨。


image.png

我們可以通過命令行的形式進行測試缤弦,也可以配置配置文件

./bin/logstash -e 'input { stdin {} } output { stdout {} }' 

或者新建一個配置文件,然后讀取配置文件

./bin/logstash -f ./config/newconfig.conf

Logstash 解析日志

在上一小節(jié)中彻磁,你已經創(chuàng)建了一個基本的Logstash管道來測試你的Logstash設置碍沐。在現(xiàn)實世界中,一個Logstash管理會稍微復雜一些:它通常有一個或多個input, filter 和 output 插件衷蜓。
在這一小節(jié)中累提,你將創(chuàng)建一個Logstash管道,并且使用Filebeat將Apache Web日志作為input磁浇,解析這些日志斋陪,然后將解析的數據寫到一個Elasticsearch集群中。你將在配置文件中定義管道,而不是在命令行中定義管道配置无虚。
(在GitHub上有一些案例可以供我們進行練習)https://github.com/elastic/examples
1.安裝并配置filebeat,在filebeat安裝目錄下新建.yml文件

filebeat.inputs:
- type: log
  paths:
      - /var/log/*.log
    output.logstash:
      hosts: ["localhost:5048"]

paths的可以進行調整缔赠,放置將要進行解析的日志文件
2.在logstash目錄下新建一個文件first-pipeline.conf(不一定在安裝目錄下)具體配置如下:

3.檢查配置并啟動Logstash

./bin/logstash -f ./config/myconfig.conf --config.test_and_exit
./bin/logstash -f ./config/myconfig.conf  --config.reload.automatic

(
--config.test_and_exit選項的意思是解析配置文件并報告任何錯誤
--config.reload.automatic選項的意思是啟用自動配置加載,以至于每次你修改完配置文件以后無需停止然后重啟Logstash
)
4.啟動filebeat

  ./filebeat -e -c filebeat-new1.yml -d "publish"

./filebeat -c filebeat-new1.yml

在Logstash控制臺上會出現(xiàn)


image.png
用Grok過濾器插件解析日志

現(xiàn)在你有了一個工作管道友题,可以從Filebeat讀取日志行嗤堰。但是你可能已經注意到日志消息的格式并不理想。你想要解析日志消息度宦,以便從日志中創(chuàng)建特定的踢匣、命名的字段。為此戈抄,您將使用grok filter插件离唬。

grok 過濾器插件是Logstash中默認可用的幾個插件之一。

grok 過濾器插件允許你將非結構化日志數據解析為結構化和可查詢的數據划鸽。

因為 grok 過濾器插件在傳入的日志數據中查找模式

為了解析數據输莺,你可以用 %{COMBINEDAPACHELOG} grok pattern ,這種模式(或者說格式)的schema如下


image.png

修改Logstash下的newconfig.conf 配置如下:

input {
    beats {
        port => "5048"
    }
}
filter {
  grok {
    match => {"message" => "%{COMBINEDAPACHELOG}" }
  }
  date {
    match => [ "timestamp", "dd/MMM/YYYY:HH:mm:ss Z" ]
    locale => en
  }

  geoip {
    source => "clientip"
  }
}
output { 
    stdout { codec => rubydebug }
}

清理filebeat目錄下的data/data/registry/下的filebeat,刪除即可裸诽,重啟filebeat

 ./filebeat -e -c filebeat-new1.yml -d "publish"

會有以下的結果:

 "message" => "3.149.9.216 - - [17/May/2015:10:05:12 +0000] \"GET /presentations/logstash-monitorama-2013/plugin/zoom-js/zoom.js HTTP/1.1\" 200 7697 \"http://semicomplete.com/presentations/logstash-monitorama-2013/\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36\"",
   "clientip" => "3.149.9.216",
   "referrer" => "\"http://semicomplete.com/presentations/logstash-monitorama-2013/\"",
      "geoip" => {
     "country_code3" => "US",
    "continent_code" => "NA",
          "location" => {
        "lat" => 37.751,
        "lon" => -97.822
    },
          "latitude" => 37.751,
         "longitude" => -97.822,
      "country_name" => "United States",
     "country_code2" => "US",
                "ip" => "3.149.9.216"

之后我們可以利用Elasticsearch和Kibana進行demo的演示
所需要的log文件在GitHub上有地址

新建Logstash下的apache_logstash.conf 配置如下:

input {  
  beats {
      port=>"5048"
  }
}


filter {
  grok {
    match => {
      "message" => '%{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:verb} %{DATA:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:response:int} (?:-|%{NUMBER:bytes:int}) %{QS:referrer} %{QS:agent}'
    }
  }

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

  geoip {
    source => "clientip"
  }

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

output {
  stdout {
    codec => dots {}
  }

  elasticsearch {
    index => "my_test3"
    template => "./apache_template.json"
    template_name => "my_test3"
    template_overwrite => true
  }
}

啟動Logstash

./bin/logstash -f ./config/apache_logstash.conf  --config.reload.automatic

清理filebeat目錄下的data/data/registry/下的filebeat,刪除即可模闲,重啟filebeat

 ./filebeat -e -c filebeat-new2.yml -d "publish"

之后就可以通過Elasticsearch和Kinana 進行可視化的展示了。

Logstash 導入數據

可以在Kibana下的Management/Saved objects進行模板導入(這里是模版)

Logstash 配置監(jiān)控

在Logstash安裝目錄下的logstash.yml文件中輸入(具體詳細可以參考這里)

 xpack.monitoring.elasticsearch.hosts: ["http://localhost:9200"]

之后可以在Kibana進行監(jiān)控崭捍,這需要重新錄入以下數據尸折,
然后在Stack Monitor 中可以看到之前的數據了


image.png

參考內容:https://www.cnblogs.com/cjsblog/p/9459781.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市殷蛇,隨后出現(xiàn)的幾起案子实夹,更是在濱河造成了極大的恐慌,老刑警劉巖粒梦,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亮航,死亡現(xiàn)場離奇詭異,居然都是意外死亡匀们,警方通過查閱死者的電腦和手機缴淋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泄朴,“玉大人重抖,你說我怎么就攤上這事∽婊遥” “怎么了钟沛?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長局扶。 經常有香客問我恨统,道長叁扫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任畜埋,我火速辦了婚禮莫绣,結果婚禮上,老公的妹妹穿的比我還像新娘悠鞍。我一直安慰自己兔综,他們只是感情好,可當我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布狞玛。 她就那樣靜靜地躺著,像睡著了一般涧窒。 火紅的嫁衣襯著肌膚如雪心肪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天纠吴,我揣著相機與錄音硬鞍,去河邊找鬼。 笑死戴已,一個胖子當著我的面吹牛固该,可吹牛的內容都是我干的。 我是一名探鬼主播糖儡,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼伐坏,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了握联?” 一聲冷哼從身側響起桦沉,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎金闽,沒想到半個月后纯露,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡代芜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年埠褪,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挤庇。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡钞速,死狀恐怖,靈堂內的尸體忽然破棺而出嫡秕,到底是詐尸還是另有隱情玉工,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布淘菩,位于F島的核電站遵班,受9級特大地震影響屠升,放射性物質發(fā)生泄漏。R本人自食惡果不足惜狭郑,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一腹暖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧翰萨,春花似錦脏答、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至雳锋,卻和暖如春黄绩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背玷过。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工爽丹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人辛蚊。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓粤蝎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親袋马。 傳聞我的和親對象是個殘疾皇子初澎,可洞房花燭夜當晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內容