使用ElasticSearch搭建日誌系統
如果:
? 你有很多台機器
? 你有各種各樣的Log
只要滿足這兩個條件其中之一,那麼一套日誌系統是很有必要的。優秀的日誌系統可以讓你及時發現問題,輕鬆追查故障原因,進而提高生產力。
本文簡單介紹一下怎麼用Elastic Search全家桶搭出一套日誌系統。Elastic Search全家桶幾乎可以說,就是設計出來干這個事的:
讓我們來研究一下全家桶的每個成員:
? Beats
官方定義是"Data Shippers for Elasticsearch",還來個slogan叫"Collect, Parse & Ship",說得雲里霧裡的。其實說白了,就是數據採集。
Beats是一系列叫XXXbeat的小工具,最常用的是Filebeat。這套東西原先是Logstash的一個模塊,後來單獨拆了出來,又根據不同的功能衍生了幾個分支。
Filebeat是個很輕量級的工具,主要干這麼三件事:
? 監聽本機指定日誌文件的新增條目,類似`tail -f`
? 做最原始的過濾和處理
? 懟去Logstash,或者Elastic Search,又或者其他地方
go語言寫的(好評)。安裝出來,你會發現這套工具異常簡單粗暴。一個可執行文件,一個配置文件,沒了。
? Logstash
官方定義是"Process Any Data, From Any Source",這個很清晰很好,問題是slogan叫"Collect, Enrich & Transport Data"。大哥你的Collect關鍵詞跟Beats兄弟重了啊!
Logstash是用來做數據處理的(也可以用來做數據採集,我相信這是歷史原因導致的),功能非常強大。它敢吹"Process Any Data, From Any Source"是有道理的,因為官方文檔上,目前(20160924)支持的數據源有:
"beats couchdb_changes drupal_dblog elasticsearch exec eventlog file ganglia gelf generator graphite github heartbeat heroku http http_poller irc imap jdbc jmx kafka log4j lumberjack meetup pipe puppet_facter relp rss rackspace rabbitmq redis salesforce snmptrap stdin sqlite s3 sqs stomp syslog tcp twitter unix udp varnishlog wmi websocket xmpp zenoss zeromq"
支持輸出到:
"boundary circonus csv cloudwatch datadog datadog_metrics email elasticsearch elasticsearch_java exec file google_bigquery google_cloud_storage ganglia gelf graphtastic graphite hipchat http irc influxdb juggernaut jira kafka lumberjack librato loggly mongodb metriccatcher nagios null nagios_nsca opentsdb pagerduty pipe riemann redmine rackspace rabbitmq redis riak s3 sqs stomp statsd solr_http sns syslog stdout tcp udp webhdfs websocket xmpp zabbix zeromq"
至於數據處理本身,功能也是有夠多的,我就不貼了。實在不滿意,還可以自己擼袖寫插件。
? Kibana
"See the Value in Your Data","Explore & Visualize Your Data"。有點被營銷加工過的味道。
Kibana這玩意,我一開始是為了用ES的Marvel插件看集群運行狀態而裝的。第一感覺是,ES全家桶怎麼一個綁一個,真麻煩。跑通後閑置了一段時間,之後偶然來玩了下Kibana本身的功能,就發現...挺厲害啊。
Kibana出報表的整個流程分為3步:
? 第一步:寫query,在Elastic Search里搜出一批數據
? 第二步:使用搜出來的數據,創建圖表
? 第三步:拼接多個圖表,做成一個報表建什麼報表,就是看使用者的想像力了。我一開始是做了搜索相關的報表,像是最近一小時熱搜關鍵詞,最近一小時緩存命中率什麼的。後來發現,Kibana的潛力真是無窮無盡。
Kibana加上Elastic Search,可以做實時數據分析。而且因為Elastic Search本質是個高性能搜索引擎,所以出數據很快。
現在讓我們把這幾個成員組裝到一起。
可以看到,Beats + Logstash + Elastic Search + Kibana,可以做一套非常強大的日誌系統。
官方給的圖:
一套日誌系統,高可用,可橫向擴展,高自定義,出來的圖表還好看,你說吼不吼啊!
具體怎麼組裝ES全家桶的,還是推薦各位上官網看文檔,或者搜其他教程,或者直接把全家桶download下來把玩。畢竟日誌系統裡面最核心的ES索引設計,是跟著具體業務走的。本文提供一些經驗:
? 不一定全家桶都要用
在數據量不大、或者做抽樣的時候,完全可以不用Beats和Logstash,數據直接用HTTP RESTful介面懟Elastic Search。如果是一些監控類的腳本,可以直接在shell里一句curl搞定,非常適合運維同學使用。
? 大數據量下的配置
數據量到了一定規模的時候,全家桶組合拳會開始體現價值。
Beats是簡單高可用的,瓶頸一般會出現在Logstash(吃CPU)和Elastic Search(吃磁碟IO)上。Logstash好辦,而Elastic Search在加機器的時候如果分片數量過少,會影響效果。所以建議一開始就給索引(index)配置較大的分片數量(shards)。
Elastic Search的ttl屬性有點問題,如果要按時間分片的話,建議直接從索引這一層來操刀。例如搜索日誌的索引名字就叫search-log-20160924。自己造個輪子,定時創建新的索引、刪除過期的索引。
? 能不能不用Elastic Search
當然可以,Beats跟Logstash單獨拿出來用也是很不錯的工具。數據存儲和分析未必要走-> ES -> Kibana這條路。可以感受到,Elastic Search逐漸成為Elastic Stack的概念了,不僅僅是搜索,而是整套數據解決方案。
推薦閱讀:
※ElasticSearch優化系列一:集群節點規劃
※使用ElasticSearch踩過的坑
※Elasticsearch 5:集群設置與管理(第二篇)
※從Elasticsearch來看分散式系統架構設計
※Elasticsearch與Solr的選擇?
TAG:Elasticsearch | 数据分析 | 运维 |