本文收錄在Linux運維企業架構實戰系列 一、els、elk 的介紹 1、els,elk els:ElasticSearch,Logstash,Kibana,Beats elk:ElasticSearch,Logstash,Kibana ① ElasticSearch 搜索引擎 ElasticSea ...
本文收錄在Linux運維企業架構實戰系列
一、els、elk 的介紹
1、els,elk
els:ElasticSearch,Logstash,Kibana,Beats
elk:ElasticSearch,Logstash,Kibana
ElasticSearch 是一個基於Lucene的搜索引擎,提供索引,搜索功能。它提供了一個分散式多用戶能力的全文搜索引擎,基於RESTful web介面。Elasticsearch是用Java開發的,並作為Apache許可條款下的開放源碼發佈,是當前流行的企業級搜索引擎。設計用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便
Logstash 是一個開源的伺服器端數據處理流水線,它可以同時從多個數據源獲取數據,並將其轉換為最喜歡的"存儲"(Ours is Elasticsearch, naturally.)
③ Beats:採集日誌信息(加上beats 就是els),GO開發的,所以高效、很快
Filebeat:Log Files
Metricbeat:Metrics
Packetbeat:Network Data
Winlogbeat:Windows Event Logs
Heartbeat:Uptime Monitoring
Kibana 讓你可視化你的Elasticsearch數據並導航Elastic Stack,所以你可以做任何事情,從凌晨2:00分析為什麼你得到分頁,瞭解雨水可能對你的季度數字造成的影響。
實驗所需要的包(我用的是5.5.1版本),都放在我的網盤裡了,需要的私聊 https://pan.baidu.com/s/1c2An0Co
機器名稱 |
IP配置 |
服務角色 |
els |
192.168.1.101(私) 192.168.10.101(公) |
elasticsearch(搜索引擎) |
logstash |
192.168.1.102(私) 192.168.10.102(公) |
logstash(日誌處理) redis(緩衝隊列) |
filebeat
|
192.168.1.103(私) 192.168.10.103(公) |
filebeat(日誌收集) httpd/mysql(生成日誌) |
kibana |
192.168.1.104(私) 192.168.10.104(公) |
kibana(展示界面) |
② 修改主機名、hosts文件,確保節點直接能通過主機名連通
[root@els ~]# hostnamectl set-hostname els.along.com
[root@logstash ~]# hostnamectl set-hostname logstash.along.com
[root@filebeat ~]# hostnamectl set-hostname filebeat.along.com
[root@kibana ~]# hostnamectl set-hostname kibana.along.com
[root@server1 ~]# hostnamectl set-hostname 主機名
[root@server1 ~]# vim /etc/hosts
192.168.1.102 logstash.along.com
192.168.1.103 filebeat.along.com
192.168.1.104 kibana.along.com
[root@els ~]# ping filebeat.along.com
[root@server3 ~]# setenforce 0
[root@server1 ~]# systemctl restart chronyd
二、安裝搭建elasticsearch 和head 插件
1、安裝elasticsearch
Elasticsearch 是一個分散式的 RESTful 風格的搜索和數據分析引擎,能夠解決不斷涌現出的各種用例。作為 Elastic Stack 的核心,它集中存儲您的數據,幫助您發現意料之中以及意料之外的情況
[root@server1 ~]# yum install java-1.8.0-openjdk-devel -y
[root@server1 ~]# rpm -ivh elasticsearch-5.5.1.rpm
2、配置elasticsearch
[root@server1 ~]# vim /etc/elasticsearch/jvm.options 修改分配的空間大小
註意:不要超過32G,如果空間大,多跑幾個實例,不要讓一個實例太大記憶體
[root@els ~]# vim /etc/elasticsearch/elasticsearch.yml
cluster.name: alongels #集群名字 node.name: els #節點名 path.data: /els/data #索引路徑 path.logs: /els/logs #日誌存儲路徑 network.host: 192.168.10.101 #對外通信的地址,依次修改為自己機器對外的IP #http.port: 9200 #預設埠
[root@els ~]# mkdir -pv /els/{data,logs} && chown -R elasticsearch.elasticsearch /els/*
[root@els ~]# systemctl start elasticsearch.service
② [root@server1 ~]# curl 192.168.10.101:9200
3、搭建elasticsearch 集群(自己選擇)
[root@server1 ~]# vim /etc/elasticsearch/elasticsearch.yml
cluster.name: alongels #集群名字 node.name: server1 #節點名,依次修改為server2,server3 path.data: /els/data #索引路徑 path.logs: /els/logs #日誌存儲路徑 network.host: 192.168.10.101 #對外通信的地址,依次修改為自己機器對外的IP #http.port: 9200 #預設埠 discovery.zen.ping.unicast.hosts: ["server1", "server2","server3"] #發現方式,採用單播 discovery.zen.minimum_master_nodes: 2 #數量要大於集群中節點的半數
[root@server1 ~]# mkdir -pv /els/{data,logs} && chown -R elasticsearch.elasticsearch /els/*
[root@server2 ~]# mkdir -pv /els/{data,logs} && chown -R elasticsearch.elasticsearch /els/*
[root@server3 ~]# mkdir -pv /els/{data,logs} && chown -R elasticsearch.elasticsearch /els/*
[root@server3 ~]# systemctl start elasticsearch.service
4、安裝elasticsearch 的head插件(Web前端)
https://github.com/mobz/elasticsearch-head 這裡有github上的詳細步驟
[root@server1 ~]$ cd /usr/local/
[root@server1 local]$ yum -y install git
[root@server1 local]$ git clone git://github.com/mobz/elasticsearch-head.git
[root@server1 local]$ cd elasticsearch-head/
[root@server1 elasticsearch-head]$ yum -y install npm
[root@server1 elasticsearch-head]$ npm install
Error: Command failed: tar jxf /tmp/phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2
bunzip2 /tmp/phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2
tar -xvf /tmp/phantomjs/phantomjs-2.1.1-linux-x86_64.tar
再次執行[root@server1 elasticsearch-head]$ npm install
[root@server1 ~]$ vim /etc/elasticsearch/elasticsearch.yml
# ------------------------ Enable CORS in elasticsearch ------------------------- http.cors.enabled: true http.cors.allow-origin: "*" #授所有許可權
① 重啟elasticsearch 服務,打開了9100 埠
[root@server1 ~]$ service elasticsearch restart
[root@server1 ~]# cd /usr/local/elasticsearch-head/
[root@server1 elasticsearch-head]# npm run start 前端運行
[root@server1 elasticsearch-head]# nohup npm run start & 後臺運行
[root@server1 elasticsearch-head]# jobs 查看後臺運行的任務
[1]+ Running nohup npm run start &
5、測試elasticsearch-head
網頁訪問http://192.168.1.101:9100/
6、elasticsearch-head 的全功能文本搜索引擎庫:lucene
https://lucene.apache.org/core/ 下載地址
Apache Lucene 是一個完全用Java編寫的高性能,全功能的文本搜索引擎庫。它幾乎適用於任何需要全文搜索的應用程式,特別是跨平臺的應用程式。
三、安裝介紹logstash
1、介紹
查看官方文檔 https://www.elastic.co/cn/products/logstash
① 官方介紹:Logstash is an open source data collection engine with real-time pipelining capabilities。簡單來說logstash就是一根具備實時數據傳輸能力的管道,負責將數據信息從管道的輸入端傳輸到管道的輸出端;與此同時這根管道還可以讓你根據自己的需求在中間加上濾網,Logstash提供里很多功能強大的濾網以滿足你的各種應用場景。
② Logstash的事件(logstash將數據流中等每一條數據稱之為一個event)處理流水線有三個主要角色完成:inputs –> filters –> outputs:
- inpust:必須,負責產生事件(Inputs generate events),常用:File、syslog、redis、beats(如:Filebeats)
- filters:可選,負責數據處理與轉換(filters modify them),常用:grok、mutate、drop、clone、geoip
- outpus:必須,負責數據輸出(outputs ship them elsewhere),常用:elasticsearch、file、graphite、statsd
所謂的搜索模式就是像變數一樣,把用的較多的事先定義好,便於多次引用
[root@centos7-1 conf.d]# rpm -ql logstash |grep pattern
[root@centos7-1 conf.d]# less /usr/share/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-4.1.1/patterns/grok-patterns
/usr/share/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-4.1.1/patterns
2、下載安裝
① 去官網下載對應版本的logstash ,我下載的是5.5.1版本
https://www.elastic.co/cn/downloads/logstash
[root@centos7-1 els]# rpm -ivh logstash-5.5.1.rpm
[root@centos7-1 els]# vim /etc/profile.d/logstash.sh
export PATH=$PATH:/usr/share/logstash/bin/
[root@centos7-1 els]# . /etc/profile.d/logstash.sh
四、logstash 演示用法
[root@centos7-1 logstash]# cd /etc/logstash/conf.d/
1、示例1:標準輸入輸出
[root@centos7-1 conf.d]# vim test.conf
input { stdin {} } output { stdout { codec => rubydebug } }
[root@centos7-1 conf.d]# logstash -f ./test.conf -t
[root@centos7-1 conf.d]# logstash -f ./test.conf
2、示例2:從文件輸入數據,經grok 拆分插件過濾之後輸出至標準輸出
grok:拆分欄位
date:修改時間格式
[root@centos7-1 ~]# yum install httpd
[root@centos7-1 ~]# systemctl start httpd
[root@centos7-1 ~]# vim /var/www/html/index.html
[root@centos7-1 ~]# for i in {1..20}; do echo "Test Page ${i}" > /var/www/html/test${i}.html; done
[root@centos7-1 ~]# for i in {1..200}; do j=$[$RANDOM%20+1]; curl http://192.168.1.102:80/test${j}.html; done
[root@centos7-1 conf.d]# vim test2.conf
input { stdin {} } filter { grok { #拆分message 欄位 match => { #指定匹配哪個欄位 "message" => "%{COMBINEDAPACHELOG}" #引用定義好的搜索模式 } remove_field => "message" #刪除message 欄位 } date { #改變時間格式 match => ["timestamp","dd/MMM/YYYY:H:m:s Z"] remove_field => "timestamp" #刪除原有的時間欄位 } } output { stdout { codec => rubydebug } }
[root@centos7-1 conf.d]# logstash -f test2.conf -t
[root@centos7-1 conf.d]# logstash -f test2.conf
3、示例3:filter 的date、mutate 插件
mutate:修改欄位
① 編輯配置文件,由於input、output還是標準輸入輸出,就沒有貼出
[root@centos7-1 conf.d]# vim test3.conf
filter { grok { match => { "message" => "%{HTTPD_COMBINEDLOG}" } } date { match => ["timestamp","dd/MMM/YYYY:H:m:s Z"] } mutate { rename => { "agent" => "user_agent" } } }
[root@centos7-1 conf.d]# logstash -f test3.conf -t
[root@centos7-1 conf.d]# logstash -f test3.conf
4、示例4:filter 的geoip 模塊
geoip:利用這個模塊解析ip的地址,利於後邊kibana 的地理位置展示圖
網上下載資料庫,因為是記錄世界的IP 地址,所以經常有變動,可以寫一個計劃任務,每隔一周去網上下載一次,解包,鏈接到maxmind 下
[root@centos7-1]# tar -xvf GeoLite2-City.tar.gz
[root@centos7-1]# mv GeoLite2-City_20170704/ /etc/logstash/
[root@centos7-1 logstash]# mv GeoLite2-City_20170704/ maxmind
[root@centos7-1 ~]# echo '112.168.1.102 - - [08/Feb/2018:15:28:53 +0800] "GET /test6.html HTTP/1.1" 200 12 "-" "curl/7.29.0"' >> /var/log/httpd/access_log
① 編輯配置文件,由於input、output還是標準輸入輸出,就沒有貼出
[root@centos7-1 conf.d]# vim tes4.conf
filter { grok { match => { "message" => "%{HTTPD_COMBINEDLOG}" } } geoip { source => "clientip" #哪個源ip 欄位,轉換為地理位置 target => "geoip" #目標信息存儲時的健名 database => "/etc/logstash/maxmind/GeoLite2-City.mmdb" #資料庫路徑 } }
[root@centos7-1 conf.d]# logstash -f test4.conf -t
[root@centos7-1 conf.d]# logstash -f test4.conf
[root@centos7-1 ~]# echo '192.168.1.102 - - [08/Feb/2018:15:28:53 +0800] "GET /test6.html HTTP/1.1" 200 12 "-" "curl/7.29.0"' >> /var/log/httpd/access_log
5、示例5:output 輸出給elasticsearch
[root@centos7-1 conf.d]# vim test5.conf
input { file { path => ["/var/log/httpd/access_log"] start_position => "beginning" } } filter { grok { match => { "message" => "%{HTTPD_COMBINEDLOG}" } } geoip { source => "clientip" target => "geoip" database => "/etc/logstash/maxmind/GeoLite2-City.mmdb" } } output { elasticsearch { hosts => ["http://192.168.10.101:9200/"] #主機 index => "logstash-%{+YYYY.MM.dd}" #索引 document_type => "apache_logs" #文檔類型標識,自己定義 } }
6、示例6:output 輸出給redis
[root@logstash]# vim /etc/redis.conf
requirepass ilinux.io #加密碼,為了安全運行
開啟redis
[root@centos7-1 conf.d]# systemctl start redis 打開6379 埠
[root@centos7-1 conf.d]# vim test6.conf
output { redis { batch => true #批量寫入 host => "192.168.10.102" #主機 password => "ilinux.io" #密碼 port => 6379 #埠 #db => 0 #預設就是0號庫 data_type => "list" #數據格式,列表 key => "apachelogs" #自己定義的鍵 } }
② [root@logstash]# logstash -f test6.conf
[root@centos7-1 ~]# redis-cli -a ilinux.io
127.0.0.1:6379> LLEN apachelogs
127.0.0.1:6379> LINDEX apachelogs 1
(4)註:logstash 開啟的方法:
① logstash 指令指定配置文件啟動
logstash -f test.conf
② systemctl start logstash 命令啟動
此命令啟動,要確保/etc/logstash/conf.d 目錄下沒有其他多餘的配置文件。
五、Beats 輕量型數據採集器
Beats 平臺集合了多種單一用途數據採集器。這些採集器安裝後可用作輕量型代理,從成百上千或成千上萬台機器向 Logstash 或 Elasticsearch 發送數據。
1、下載
[root@centos7-1 ~]# rpm -ivh filebeat-5.5.1-x86_64.rpm
2、示例1:配置filebeats,目標elasticsearch
[root@filebeat ~]# vim /etc/filebeat/filebeat.yml
#================= Filebeat prospectors =====================
filebeat.prospectors:
paths:
- /var/log/httpd/*log
#exclude_lines: ["^DBG"] 黑名單
#include_lines: ["^ERR", "^WARN"] 白名單
#-------------------------- Elasticsearch output ------------------------------
output.elasticsearch:
# Array of hosts to connect to.
hosts: ["192.168.10.101:9200"] #主機和埠
#protocol: "https" #如果是https
#username: "elastic" #用戶,如果elasticsearch設置的有的話
#password: "changeme" #密碼
[root@centos7-1 filebeat]# systemctl start filebeat.service
[root@centos7-1 ~]# yum install httpd
[root@centos7-1 ~]# systemctl start httpd
[root@centos7-1 ~]# vim /var/www/html/index.html
[root@centos7-1 ~]# for i in {1..20}; do echo "Test Page ${i}" > /var/www/html/test${i}.html; done
[root@centos7-1 ~]# for i in {1..20}; do j=$[$RANDOM%20+1]; curl http://192.168.1.102:80/test${j}.html; done
3、示例2:完整的ELK —> 配置filebeat,目標給logstash
[root@filebeat ~]# vim /etc/filebeat/filebeat.yml
filebeat.prospectors:
- input_type: log
paths:
- /var/log/httpd/*log
output.logstash:
hosts: ["192.168.10.102:5044"]
[root@centos7-1 filebeat]# systemctl start filebeat.service
[root@logstash conf.d]# vim /etc/logstash/conf.d/apachelogs.conf
input { beats { port => 5044 } } filter { grok { match => { "message" => "%{HTTPD_COMBINEDLOG}" } } } output { elasticsearch { hosts => ["http://192.168.10.101:9200/"] index => "logstash-%{+YYYY.MM.dd}" document_type => "apache_logs" } }
[root@centos7-1 conf.d]# logstash -f apachelogs.conf -t 測試
[root@centos7-1 filebeat]# systemctl restart filebeat.service
4、示例3:完整的els搭建
[root@filebeat ~]# vim /etc/filebeat/filebeat.yml
filebeat.prospectors:
- input_type: log
paths:
- /var/log/httpd/*log
#----------------------------- Redis output --------------------------------
output.redis:
hosts: ["192.168.10.102"]
password: "ilinux.io"
key: "httpdlogs"
datatype: "list"
db: 0
timeout: 5
[root@centos7-1 conf.d]# redis-cli -a ilinux.io 查詢有key值,有數據
[root@logstash conf.d]# vim /etc/logstash/conf.d/apachelogs.conf
input { redis { host => "192.168.10.102" port => "6379" password => "ilinux.io" data_type => "list" key => "httpdlogs" threads => 2 } } filter { grok { match => { "message" => "%{HTTPD_COMBINEDLOG}" } } date { match => ["timestamp","dd/MMM/YYYY:H:m:s Z"] remove_field => "timestamp" } } output { elasticsearch { hosts => ["http://192.168.10.101:9200/"] index => "logstash-%{+YYYY.MM.dd}" document_type => "apache_logs" } }
[root@filebeat ~]# systemctl start logstash
六、kibana
1、介紹
kibana 是您走進 Elastic Stack 的視窗,Kibana 讓您能夠可視化 Elasticsearch 中的數據並操作Elastic Stack,因此您可以在這裡解開任何疑問:例如,為何會在凌晨 2:00 被傳呼,雨水會對季度數據造成怎樣的影響。
Kibana 讓您能夠自由地選擇如何呈現您的數據。或許您一開始並不知道自己想要什麼。不過藉助Kibana 的互動式可視化,您可以先從一個問題出發,看看能夠從中發現些什麼。
Kibana 核心搭載了一批經典功能:柱狀圖、線狀圖、餅圖、環形圖,等等。它們充分利用了Elasticsearch 的聚合功能。
利用我們的 Elastic Maps Services 來實現地理空間數據的可視化,或者發揮創意,在您自己的地圖上實現自定義位置數據的可視化。
您可以利用 Timelion,對您 Elasticsearch 中的數據執行高級時間序列分析。您可以利用功能強大、簡單易學的表達式來描述查詢、轉換和可視化。
憑藉搜索引擎的相關性功能,結合 graph 探索,揭示您 Elasticsearch 數據中極其常見的關係。
2、安裝搭建
從官網上下載對應的版本https://www.elastic.co/cn/downloads/kibana
[root@kibana ~]#rpm -ivh kibana-5.5.1-x86_64.rpm
server.port: 5601
server.host: "0.0.0.0"
server.name: "kibana.along.com"
elasticsearch.url: "http://192.168.10.101:9200"
[root@kibana ~]# systemctl start kibana.service
3、配置使用kibana
(1)打開網頁 http://192.168.1.104:5601,選擇logstash 發送的日誌,就直接顯示效果了
我以餅狀圖為例,創建top5 來源ip、top10 請求點擊頁面 的餅狀圖
選擇對什麼進行聚合圖形,我選擇對自己設置的terms 詞條進行聚合,再選擇clientip.keyword 的key鍵值,最後展示
(3)其他欄位都可進行設置,多種圖案,也可將多個圖形放在一起展示
有什麼問題,歡迎討論~