flume+es+kibana日誌系統
上個公司做了個日誌系統,其實之間斷斷續續搞了三套方案,一套就是前邊說的hadoop方案,網上也有但是不全,自己搞了下發現太龐大不適合小型專案,這次搞了flume+ES+kibana方案,感覺非常不錯哦,es的儲存效能很高啊,kibana其實後期可以自己改的也非常不錯。自己寫了份文件,在這給大家分享下。(其實後來又搞了個logstash+redis的方案也是很不錯,解決了延遲等問題,因為他們都是自己家的產品嗎,所以相容性非常好)
==============================我是華麗的分割線=========================================================================
目錄
1. 概述
為了專案做日誌監控,日至查詢分析
目前SIT IP
2. 理念
採用了flume elasticsearch kibana 組合
機器配置:
10.16.0.150(es)
10.16.0.151(es)
10.16.0.152(es)
10.16.10.40(flume)
3. Elasticsearch 搭建
ES作為資料儲存倉庫所以先搭建ES叢集
3.1 建立es賬戶
useradd es
passwd es
下載壓縮包elasticsearch-1.5.0
在linux系統上,elasticsearch預設使用hybrid mmapfs / niofs來儲存索引檔案,因此作業系統主要會通過mmap來限制儲存的空間,因此如果儲存空間滿了,那麼會丟擲異常,我們可以使用如下命令來更改設定
1 |
|
3.2 修改配置檔案
解壓修改conf下的配置檔案elasticsearch.yml
將node.name的值設定為“ebbc-node1”,表示當前這個es服務節點名字為ebbc-node1。
修改cluster.name的值為ebbc
3.3 叢集啟動
啟動ES。進入ES安裝目錄,執行命令:bin/elasticsearch -d,然後在瀏覽器輸入http://ip:9200/,檢視頁面資訊,是否正常啟動。status=200表示正常啟動了,還有一些es的版本資訊,name為配置檔案中node.name的值。
在另外一臺機器上,安裝同樣的步驟安裝ES,因為至少2臺服務才算叢集嘛!注意,在配置時,將node.name的值設定為ebbc-node2,總之必須和之前配置值不同。
兩臺es服務同時起來,因為配置檔案中均預設cluster.name=ebbc,所以這兩臺機器自動構建成一個叢集,叢集名字為ebbc。
bigdesk是elasticsearch的一個叢集監控工具,可以通過它來檢視es叢集的各種狀態,如:cpu、記憶體使用情況,索引資料、搜尋情況,http連線數等。專案git地址: https://github.com/lukas-vlcek/bigdesk。和head一樣,它也是個獨立的網頁程式,使用方式和head一樣。
外掛安裝執行:
方法1:
1.bin/plugin -installlukas-vlcek/bigdesk
2.執行es
3.開啟http://localhost:9200/_plugin/bigdesk/
當然,也可以直接下載原始碼執行index.html
方法2:
1.https://github.com/lukas-vlcek/bigdesk下載zip解壓
2.建立elasticsearch-1.0.0\plugins\bigdesk\_site檔案
3.將解壓後的bigdesk-master資料夾下的檔案copy到_site
4.執行es
5.開啟http://localhost:9200/_plugin/bigdesk/
同樣是輸入ip地址和埠後連線,介面如下。加星的表示主節點。
下面介紹下各個圖表。
系統監控:
這裡包含系統方面的一些狀態,左起分別為:cpu,記憶體,交換區和平均負載的情況
jvm:
顯示jvm的一些狀態,左起分別為:jvm heap記憶體使用情況,藍色的為已使用記憶體;非heap使用記憶體;執行緒數;gc情況(次數和時間);
程序:
下面四張圖主要顯示es的程序對系統資源的使用情況,左起分別為:程序開啟檔案數,記憶體使用情況,cpu時間和程序的cpu使用率
ps:
記憶體使用情況中的
Totalvirtual指linux下虛擬記憶體,它包括virtual memory map中的所有資料量之和。包括:程式類+程式資料+jar包空間+jre佔用空間等。
residentmemory指程式實際佔用的實體記憶體。
通訊:
這裡可以檢視tcp和http連結的一些資料。
索引:
這裡可以檢視索引資料和搜尋的一些情況。
左上起:每秒索引請求,搜尋時間,每秒取資料請求,取資料時間。
左下起:快取大小,快取失效個數,每秒索引請求,索引時間。
檔案系統:
顯示硬碟的讀寫情況
elasticsearch-head是一個elasticsearch的叢集管理工具,它是完全由html5編寫的獨立網頁程式,你可以通過外掛把它整合到es。
安裝命令:bin/plugin -install mobz/elasticsearch-head
安裝完成後plugins目錄下會有head的資料夾。
如果需要從資料庫同步資料,則需要安裝此外掛
Installation
./bin/plugin--install jdbc --url http://xbib.org/repository/org/xbib/elasticsearch/plugin/elasticsearch-river-jdbc/1.5.0.0/elasticsearch-river-jdbc-1.5.0.0.zip
最新版本請檢視當前githubhttps://github.com/jprante/elasticsearch-jdbc
Documentation
Twoflavors: river or feeder
The plugin can operate as a river in "pull mode" or as a feederin "push mode". In feeder mode, the plugin runs in a separate JVM andcan connect to a remote Elasticsearch cluster.
River or feeder?
The plugin comes in two flavors, river or feeder. Hereare the differences. Depending on your requirements, it is up to you to make areasonable choice.
Note, the JDBC river code wraps the feeder code, thereis no reinvention of anything. Main difference is the different handling bystarting/stopping the process by a separate JVM in the feeder flavor.
River |
Feeder |
standard method of Elasticsearch to connect to external sources and pull data |
method to connect to external sources for pushing data into Elasticsearch |
multiple river instances, many river types |
no feeder types, feeder instances are separate JVMs |
based on an internal index |
based on a feeder document in the Elasticsearch index for maintaining state |
does not scale, single local node only |
scalable, not limited to single node, can connect to local or remote clusters |
automatic failover and restart after cluster recovery |
no failover, no restart |
hard to supervise single or multi runs and interruptions |
command line control of feeds, error exit code 1, crontab control |
no standard method of viewing river activity from within Elasticsearch |
feed activity can be monitored by examining separate JVM |
about to be deprecated by Elasticsearch core team |
Feeder API provided by xbib, using advanced features supported by xbib libraries only. Part of upcoming "gatherer" API to support coordinated data harvesting by multiple ES nodes |
4.4.3.1 JDBC-ORACLE
拷入OJDBC的jar包
建立索引需要
curl –XPUT localhost:9200/ ebbc-operate
建立mapping
curl -XPUT'http://localhost:9200/ebbcoperate/operate/_mapping' -d '
{
"operate": {
"_id" : {
"path" : "ID"
},
"_ttl" : { "enabled" : true,
"default" :"1d"
},
"properties": {
"ID": {
"type":"string",
"store":"yes"
}
}
}
}'
建立plugin 連線oracle
一定要注意轉義字元
curl -XPUT 'localhost:9200/_river/my_oracle_river/_meta'-d '{
"type" : "jdbc",
"jdbc" : {
"threadpoolsize" : 1,
"url" : "jdbc:oracle:thin:@//10.16.10.54:1521/ebbc",
"user" :"ebbc",
"password" :"ebbc",
"sql" :"select * from T_GNR_OPERATE_LIST ORDER BY OPER_TIMEDESC",
"index" :"ebbcoperate",
"type" :"operate",
"schedule" :"0 0/30 * ? * *"
}
}'
查詢
================search===============
curl localhost:9200/ebbc-operate?_search
====================delete============
curl -XDELETE localhost:9200/_river/my_oracle_river
3.5 建立索引
所以就相當於我們平時的資料庫,型別就相當於我們的表,要想在kibana展示,必須要建立
一個索引,而我們在flume裡面已經配置了自動建立的規則,所以這裡只是 展示幾個命令
我們可以獲得節叢集中的節點列表:
curl 'localhost:9200/_cat/nodes?v'
要檢查叢集健康,我們將使用_cat API。需要事先記住的是,我們的節點HTTP的埠是9200:
curl 'localhost:9200/_cat/health?v'
讓我們看一下我們的索引:
curl 'localhost:9200/_cat/indices?v'
現在讓我們建立一個叫做“customer”的索引,然後再列出所有的索引:
curl -XPUT 'localhost:9200/customer?pretty'
curl 'localhost:9200/_cat/indices?v'
3.6 建立模版
為了方便每次不重新書寫_mapping,所以我覺得建立一個模版,模版對於懶人有著很直接的效果
下面我們建立一個簡單模版
curl -XPUT localhost:9200/_template/ebbc-template-d '
{
"template": "ebbc-*",
"mappings": {
"*": {
"_source": {
"enabled": false
},
"_ttl": {
"enabled": true,
"default":"3d"
},
"properties": {
"body": {
"type":"string"
},
"date": {
"type":"date",
"format":"dateOptionalTime"
}
}
}
}
}’
當然,我們也可以給他配置在config下,可以參考官方文件
附錄查詢 ,刪除命令
curl-XDELETE localhost:9200/_template/template_1
curl-XGET localhost:9200/_template/ebbc-template?pretty
這下,每次自動建立index時就會根據我的要求來咯
4.1 建立flume 賬戶
[[email protected]~]$ su -
Password:
[[email protected]~]# useradd flume
[[email protected]~]# passwd flume
Changingpassword for user flume.
Newpassword:
BADPASSWORD: it is too short
BADPASSWORD: is too simple
Retypenew password:
passwd:all authentication tokens updated successfully.
上傳flume壓縮包 ,版本apache-flume-1.5.0.1-bin.tar.gz
解壓tar -zxvf apache-flume-1.5.0.1-bin.tar.gz
4.2 配置環境變數
簡單配置
################FLUME_CONF############
export FLUME_HOME=/home/flume/apache-flume-1.5.0.1
export FLUME_CONF_DIR=$FLUME_HOME/conf
export PATH=$PATH:$FLUME_HOME/bin
完整配置
################JAVA_HOME#############
export JAVA_HOME=/usr/java/jdk1.7.0_71
exportCLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
################HADOOP_HOME###########
export HADOOP_HOME=/home/hadoop/hadoop-2.5.1
################FLUME_CONF############
exportFLUME_HOME=/home/flume/apache-flume-1.5.0.1
exportFLUME_CONF_DIR=$FLUME_HOME/conf
################ant###################
export ANT_HOME=/usr/apache-ant-1.9.4
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$ANT_HOME/bin:$FLUME_HOME/bin
###########Alias for hadoop###########
alias hdfs='hadoop fs'
=============================如果需要連線hadoop需要以下配置==================
注意如果本機器沒有配置hadoop需要拷貝一些jar
若將採集的資料上傳到hdfs中 該機器沒有安裝hadoop需要將一下jar拷貝過來
將hadoop 的/share/hadoop/common/hadoop-common-2.4.1.jar拷貝到flume的lib下
將hadoop 的/share/hadoop/common/lib/commons-configuration-1.6.jar拷貝到flume的lib下
將hadoop 的/share/hadoop/common/lib/hadoop-auth-2.4.1.jar拷貝到flume的lib下
將hadoop 的/share/hadoop/hdfs/hadoop-hdfs-2.4.1.jar拷貝到flume的lib下
將hadoop 的/etc/core-site.xml拷貝到flume的conf下
將hadoop 的/etc/hdfs-site.xml拷貝到flume的conf下
=============================如果需要連線hadoop需要以上配置==================
4.4 修改config配置檔案
mv flume-env.sh.template flume-env.sh
vi flume-env.sh
修改JAVA_HOME
JAVA_HOME=/usr/java/jdk1.7.0_71
JAVA_OPTS="-Xms512m –Xmx1024m-Dcom.sun.management.jmxremote"
mv flume-conf.properties.templateflume-master.conf
vi flume-master.conf
注意:要想抓取日誌需要修改appsvr使用者許可權chmod o+rx appsvr
拷貝的話需要給flume啟動程式附許可權chmod u+x flume-ng
4.4.1配置配置檔案(此處為以hadoop作為儲存的配置檔案)
# Finally, now that we've defined all ofour components, tell
# agent1 which ones we want to activate.
agent1.channels = ch1
agent1.sources = avro-source1
agent1.sinks = sink1
# Define a memory channel called ch1 onagent1
agent1.channels.ch1.type = memory
agent1.channels.ch1.capacity = 100000
agent1.channels.ch1.transactionCapacity =100000
agent1.channels.ch1.keep-alive = 30
# Define an Avro source called avro-source1on agent1 and tell it
# to bind to 0.0.0.0:41414. Connect it tochannel ch1.
#agent1.sources.avro-source1.channels = ch1
#agent1.sources.avro-source1.type = avro
#agent1.sources.avro-source1.bind = 0.0.0.0
#agent1.sources.avro-source1.port = 41414
#agent1.sources.avro-source1.threads = 5
#define source monitor a file
agent1.sources.avro-source1.type = exec
agent1.sources.avro-source1.shell =/bin/bash -c
agent1.sources.avro-source1.command =tail -F /home/flume/testData/test.log
agent1.sources.avro-source1.channels = ch1
agent1.sources.avro-source1.threads = 5
# Define a logger sink that simply logs allevents it receives
# and connect it to the other end of thesame channel.
agent1.sinks.sink1.channel = ch1
agent1.sinks.sink1.type = hdfs
agent1.sinks.sink1.hdfs.minBlockReplicas=1
agent1.sinks.sink1.hdfs.useLocalTimeStamp=true
agent1.sinks.sink1.hdfs.path =hdfs://10.16.0.151:9000/home/hadoop/pactera/%y-%m-%d
agent1.sinks.sink1.hdfs.writeFormat = Text
agent1.sinks.sink1.hdfs.fileType =DataStream
agent1.sinks.sink1.hdfs.filePrefix = ebc_
agent1.sinks.sink1.hdfs.idleTimeout = 25
agent1.sinks.sink1.hdfs.callTimeout = 50
agent1.sinks.sink1.hdfs.round = true
agent1.sinks.sink1.hdfs.rollCount = 10000
agent1.sinks.sink1.hdfs.rollSize = 10240000
agent1.sinks.sink1.hdfs.rollInterval=15
agent1.sinks.sink1.hdfs.rollTimerPoolSize=20
4.4.2此處是以es作為儲存的配置檔案
# Finally, now that we've defined all ofour components, tell
# agent1 which ones we want to activate.
agent1.channels = ch1 ch2
agent1.sources = source1 source2
agent1.sinks = sink1 sink2
# Define a memory channel called ch1 onagent1
agent1.channels.ch1.type = memory
agent1.channels.ch1.capacity = 100000
agent1.channels.ch1.transactionCapacity =100000
agent1.channels.ch1.keep-alive = 30
# Define an Avro source called source1 onagent1 and tell it
# to bind to 0.0.0.0:41414. Connect it tochannel ch1.
#agent1.sources.source1.channels = ch1
#agent1.sources.source1.type = avro
#agent1.sources.source1.bind = 0.0.0.0
#agent1.sources.source1.port = 41414
#agent1.sources.source1.threads = 5
#define source monitor a file
agent1.sources.source1.type = exec
agent1.sources.source1.shell = /bin/bash -c
agent1.sources.source1.command = tail -F /home/appsvr/logs/ebc-dao-service/ebc-dao-serviceAll.log
agent1.sources.source1.channels = ch1
agent1.sources.source1.threads = 5
# Define a logger sink that simply logs allevents it receives
# and connect it to the other end of thesame channel.
#agent1.sinks.sink1.channel = ch1
#agent1.sinks.sink1.type = hdfs
#agent1.sinks.sink1.hdfs.minBlockReplicas=1
#agent1.sinks.sink1.hdfs.useLocalTimeStamp=true
#agent1.sinks.sink1.hdfs.path =hdfs://10.16.0.151:9000/home/hadoop/pactera/%y-%m-%d
#agent1.sinks.sink1.hdfs.writeFormat = Text
#agent1.sinks.sink1.hdfs.fileType =DataStream
#agent1.sinks.sink1.hdfs.filePrefix = ebc_
#agent1.sinks.sink1.hdfs.idleTimeout = 25
#agent1.sinks.sink1.hdfs.callTimeout = 50
#agent1.sinks.sink1.hdfs.round = true
#agent1.sinks.sink1.hdfs.rollCount = 10000
#agent1.sinks.sink1.hdfs.rollSize =10240000
#agent1.sinks.sink1.hdfs.rollInterval=15
#this is elasticsearch sink
agent1.sinks.sink1.type = elasticsearch
agent1.sinks.sink1.hostNames =10.16.0.151:9300,10.16.0.150:9300,10.16.0.151:9300
agent1.sinks.sink1.indexName = ebbc-dao
agent1.sinks.sink1.indexType = logs
agent1.sinks.sink1.clusterName = ebbc
agent1.sinks.sink1.batchSize = 2000
agent1.sinks.sink1.ttl = 5d
agent1.sinks.sink1.serializer =org.apache.flume.sink.elasticsearch.ElasticSearchDynamicSerializer
agent1.sinks.sink1.channel = ch1
##########################################ebc-gateway-client-host#####################################################
# Define a memory channel called ch1 onagent1
agent1.channels.ch2.type = memory
agent1.channels.ch2.capacity = 100000
agent1.channels.ch2.transactionCapacity =100000
agent1.channels.ch2.keep-alive = 30
#define source monitor a file
agent1.sources.source2.type = exec
agent1.sources.source2.shell = /bin/bash -c
agent1.sources.source2.command = tail -F/home/appsvr/logs/ebc-gateway-client-host/ebc-gateway-client-hostAll.log
agent1.sources.source2.channels = ch2
agent1.sources.source2.threads = 5
#this is elasticsearch sink
agent1.sinks.sink2.type = elasticsearch
agent1.sinks.sink2.hostNames =10.16.0.151:9300,10.16.0.150:9300,10.16.0.151:9300
agent1.sinks.sink2.indexName =ebc-gateway-client-host
agent1.sinks.sink2.indexType = logs
agent1.sinks.sink2.clusterName = ebbc
agent1.sinks.sink2.batchSize = 2000
agent1.sinks.sink2.ttl = 5d
agent1.sinks.sink2.serializer =org.apache.flume.sink.elasticsearch.ElasticSearchDynamicSerializer
agent1.sinks.sink2.channel = ch2
4.5 修改原始碼
修改原始碼類,按需求修改sink規則
4.6 啟動命令
nohupbin/flume-ng agent -c ./conf/ -f conf/flume-master.conf -n agent1-Dflume.root.logger=INFO,console &
到此,日誌的抓取儲存已經簡單完成,下面進行精細處理
全新的資料搜尋和發現介面
統一的視覺化構建器,用以構建你喜歡和新加入的那些圖表:
區塊圖
資料表格
折線圖
Markdown 文字掛件
餅圖(包括甜圈圖)
原始文件掛件
單數值掛件
貼片地圖
垂直柱狀圖
可拖拽的儀表板構建方式,讓你可以快速新增,刪除視覺化,已經修改其大小和長寬比
基於聚合介面的高階分析能力,現在支援:
去重統計(cardinality)
非時間的直方圖
範圍統計(Ranges)
關鍵詞(Significant terms)
百分比(Percentiles)
基於 Lucene Expressions 的指令碼化欄位讓你可以完成臨時計算任務
優化
可以儲存搜尋和視覺化,這樣你可以再多個儀表板上鍊接和使用同一個搜尋構建的視覺化
視覺化支援不限次數的層疊聚合,這樣你可以生成新的視覺化樣式,比如雙層甜圈圖
替換模板化和指令碼化儀表板需求的新 URL 格式
更好的移動端體驗
更快的儀表板載入速度,因為我們消減了發出的 HTTP 請求數量
客戶端請求和發往 Elasticsearch 的請求都可以有 SSL 加密
搜尋結果高亮
可以很容易訪問和匯出視覺化背後的資料:
可以在表格中檢視,也可以用 JSON 格式
匯出成 CSV 格式
檢視 Elasticsearch 請求和響應
跟儀表板一樣,可以分享和嵌入獨立的視覺化部分
其他細節
自帶網頁伺服器,用 Node.js 作為後端—— 釋出有 Linux,Windows 和 Mac OS 的二進位制檔案分發
用 D3 框架做視覺化效果
5.2 開始
你可以在幾分鐘內安裝好 Kibana 然後開始探索你的 Elasticsearch 索引。你要的就是:
Elasticsearch 1.4.4 或者更新的版本
有關你的 Elasticsearch 叢集的資訊:
你想要連線 Elasticsearch 例項的URL
你想搜尋哪些 Elasticsearch 索引
如果你的 Elasticsearch 是被 Shield保護著的,閱讀 Shield with Kibana4學習額外的安裝說明。
安裝並啟動 kibana
要安裝啟動 Kibana:
2. 解壓 .zip
或 tar.gz
壓縮檔案
3. 在安裝目錄裡執行: bin/kibana
(Linux/MacOSX)或 bin\kibana.bat
(Windows)
完畢!Kibana 現在執行在 5601 埠了。
=========================================================================
下載最新的安裝包kibana-4.0.1-linux-x64.tar.gz
修改配置檔案kibana.yml
==========================================================================
讓 kibana 連線到 elasticsearch
在開始用 Kibana 之前,你需要告訴它你打算探索哪個 Elasticsearch 索引。第一次訪問 Kibana 的時候,你會被要求定義一個 index pattern 用來匹配一個或者多個索引名。好了。這就是你需要做的全部工作。以後你還可以隨時從 Settings tab 頁面新增更多的 index pattern。
預設情況下,Kibana 會連線執行在 localhost
的Elasticsearch。要連線其他 Elasticsearch 例項,修改 kibana.yml
裡的Elasticsearch
URL,然後重啟 Kibana。如何在生產環境下使用 Kibana,閱讀Using Kibana in a ProductionEnvironment.
要從 Kibana 訪問的 Elasticsearch索引的配置方法:
1. 從瀏覽器訪問 Kibana 介面。也就是說訪問比如 localhost:5601
或者 http://YOURDOMAIN.com:5601
。
2. 制定一個可以匹配一個或者多個 Elasticsearch 索引的 index pattern 。預設情況下,Kibana 認為你要訪問的是通過 Logstash 匯入 Elasticsearch 的資料。這時候你可以用預設的 logstash-*
作為你的 index pattern。萬用字元(*) 匹配索引名中零到多個字元。如果你的 Elasticsearch
索引有其他命名約定,輸入合適的 pattern。pattern 也開始是最簡單的單個索引的名字。
3. 選擇一個包含了時間戳的索引欄位,可以用來做基於時間的處理。Kibana 會讀取索引的對映,然後列出所有包含了時間戳的欄位(譯者注:實際是欄位型別為 date 的欄位,而不是“看起來像時間戳”的欄位)。如果你的索引沒有基於時間的資料,關閉 Index contains time-based events
引數。
4. 如果一個新索引是定期生成,而且索引名中帶有時間戳,選擇 Use event times to create indexnames
選項,然後再選擇 Indexpattern interval
。這可以提高搜尋效能,Kibana 會至搜尋你指定的時間範圍內的索引。在你用
Logstash 輸出資料給 Elasticsearch 的情況下尤其有效。
5. 點選 Create
新增 index pattern。第一個被新增的 pattern 會自動被設定為預設值。如果你有多個 index pattern 的時候,你可以在 Settings> Indices
裡設定具體哪個是預設值。
好了。Kibana 現在連線上你的Elasticsearch 資料了。Kibana 會顯示匹配上的索引裡的欄位名的只讀列表。
開始探索你的資料!
你可以開始下鑽你的資料了:
在 Discover 頁搜尋和瀏覽你的資料。
當你準備在生產環境使用Kibana 的時候,比起在本機執行,你需要多考慮一些:
在哪執行 kibana
是否需要加密Kibana 出入的流量
是否需要控制訪問資料的許可權
部署的考慮
你怎麼部署 Kibana取決於你的運用場景。如果就是自己用,在本機執行 Kibana 然後配置一下指向到任意你想互動的 Elasticsearch 例項即可。如果你有一大批 Kibana 重度使用者,可能你需要部署多個 Kibana 例項,指向同一個 Elasticsearch ,然後前面加一個負載均衡。
雖然 Kibana 不是資源密集型的應用,我們依然建議你單獨用一個節點來執行 Kibana,而不是泡在 Elasticsearch 節點上。
配置 Kibana 和 shield 一起工作
如果你在用 Shield做 Elasticsearch 使用者認證,你需要給 Kibana提供使用者憑證,這樣它才能訪問 .kibana
索引。Kibana 使用者需要由許可權訪問 .kibana
索引裡以下操作:
'.kibana':
- indices:admin/create
- indices:admin/exists
- indices:admin/mapping/put
- indices:admin/mappings/fields/get
- indices:admin/refresh
- indices:admin/validate/query
- indices:data/read/get
- indices:data/read/mget
- indices:data/read/search
- indices:data/write/delete
- indices:data/write/index
- indices:data/write/update
- indices:admin/create
要配置 Kibana 的憑證,設定 kibana.yml
裡的 kibana_elasticsearch_username
和kibana_elasticsearch_password
選項即可:
#If your Elasticsearch is protected with basic auth:
kibana_elasticsearch_username:kibana4
kibana_elasticsearch_password:kibana4
開啟 ssl
Kibana同時支援對客戶端請求以及 Kibana 伺服器發往 Elasticsearch 的請求做 SSL 加密。
要加密瀏覽器到Kibana 伺服器之間的通訊,配置 kibana.yml
裡的 ssl_key_file
和 ssl_cert_file
引數:
#SSL for outgoing requests from the Kibana Server (PEM formatted)
ssl_key_file:/path/to/your/server.key
ssl_cert_file:/path/to/your/server.crt
如果你在用 Shield或者其他提供 HTTPS 的代理伺服器保護Elasticsearch,你可以配置 Kibana 通過HTTPS 方式訪問 Elasticsearch,這樣 Kibana伺服器和 Elasticsearch 之間的通訊也是加密的。
要做到這點,你需要在 kibana.yml
裡配置 Elasticsearch 的 URL 時指明是 HTTPS 協議:
elasticsearch:"https://<your_elasticsearch_host>.com:9200"
如果你給Elasticsearch 用的是自己簽名的證書,請在 kibana.yml
裡設定 ca
引數指明 PEM 檔案位置,這也意味著開啟了 verify_ssl
引數:
#If you need to provide a CA certificate for your Elasticsarech instance, put
#the path of the pem file here.
ca:/path/to/your/ca/cacert.pem
控制訪問許可權
你可以用 Elasticsearch Shield 來控制使用者通過Kibana 可以訪問到的 Elasticsearch 資料。Shield提供了索引級別的訪問控制。如果一個使用者沒被許可執行這個請求,那麼它在 Kibana 視覺化介面上只能看到一個空白。
要配置 Kibana 使用 Shield,你要位 Kibana 建立一個或者多個 Shield 角色(role),以 kibana4
作為開頭的預設角色。更詳細的做法,請閱讀 Using
Shield with Kibana 4。
10.16.0.151 NameNode 節點主機 ResourceManager 主機
10.16.0.150 DataNode 節點主機 NodeManager 主機
首先安裝hadoop2.5.1
6.1 建立使用者haddop
切換到hadoop使用者上傳hadoop安裝包
解壓安裝包tar -zxvf hadoop-2.5.1.tar.gz
6.2 配置環境變數
配置JAVA_HOME
Root使用者開啟
Vi/etc/profile
新增以下
################JAVA_HOME#############
exportJAVA_HOME=/usr/java/jdk1.7.0_71
exportCLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
################HADOOP_HOME###########
exportHADOOP_HOME=/home/hadoop/hadoop-2.5.1
exportPATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
###########Aliasfor hadoop###########
aliashdfs='hadoop fs'儲存退出
sourceprofile
6.3 準備ssh
Hadoop需要通過SSH和其它計算伺服器進行溝通,所以首先要確定本機或者是其它Hadoop計算伺服器,是否都已經安裝了ssh。
(1)、確定系統是否安裝了ssh和ssh-keygey
可以通過which命令來確認
which ssh which ssh-keygen |
如果出現
/usr/bin/which: no ssh in (/usr/.....)則表示系統裡面沒有安裝SSH服務,可以通過www.openssh.com下載安裝
(2)、釋出公鑰證書
執行如下命令:
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa |
在~/.ssh/ 目錄會生成id_rsa和id_rsa.pub兩個檔案,將id_rsa.pub複製一份在~/.ssh/目錄下,並重命名為authorized_keys,如果是單機搭建偽分散式,此時ssh的準備工作已經完成了,如果使用全分散式環境,那麼需要將authorized_keys(或authorized_keys中的內容追加到需要無密碼登陸的伺服器的~/.ssh/authorized_keys檔案中)及id_rsa(或id_rsa中的內容追加到需要無密碼登陸的伺服器的~/.ssh/id_rsa檔案中)兩個檔案複製到各臺分散式slave機器的“~/.ssh目錄中”中,這樣任意兩臺機器之間互相通過ssh訪問,都不需要輸入密碼了,如果只是拷貝到authorized_keys到slave機器中,就只能夠實現主到從的不輸密碼訪問。
注:如果需要遠端登陸的伺服器上還沒有.ssh目錄,那麼就在登陸使用者的目錄下新建.ssh目錄,許可權至少設定成744,如果.ssh目錄下沒有authorized_keys檔案,也新建該檔案,並將其許可權設定為644。
(3)測試登陸驗證
在本例中,採用的是在單機中搭建偽分散式系統,通過如下ssh命令嘗試登陸:
ssh localhost 或 ssh 127.0.0.1 |
如果不再提示輸入密碼,直接登陸成功,那麼SSH登陸就設定成功了。
6.4 修改hadoop配置檔案
1. <property>
2. <name>dfs.nameservices</name>
3. <value>hadoop-cluster1</value>
4. </property>
5. <property>
6. <name>dfs.namenode.secondary.http-address</name>
7. <value>nameNode:50090</value>
8. </property>
9. <property>
10. <name>dfs.namenode.name.dir</name>
11. <value>file:///home/hadoop/dfs/name</value>
12. </property>
13. <property>
14. <name>dfs.datanode.data.dir</name>
15. <value>file:///home/hadoop/dfs/data</value>
16. </property>
17. <property>
18. <name>dfs.replication</name>
19. <value>2</value>
20. </property>
21. <property>
22. <name>dfs.webhdfs.enabled</name>
23. <value>true</value>
24. </property>
1. <property>
2. <name>dfs.nameservices</name>
3. <value>hadoop-cluster1</value>
4. </property>
5. <property>
6. <name>dfs.namenode.secondary.http-address</name>
7. <value>nameNode:50090</value>
8. </property>
9. <property>
10. <name>dfs.namenode.name.dir</name>
11. <value>file:///home/hadoop/dfs/name</value>
12. </property>
13. <property>
14. <name>dfs.datanode.data.dir</name>
15. <value>file:///home/hadoop/dfs/data</value>
16. </property>
17. <property>
18. <name>dfs.replication</name>
19. <value>2</value>
20. </property>
21. <property>
22. <name>dfs.webhdfs.enabled</name>
23. <value>true</value>
24. </property>
在 mapred-site.xml 中配置其使用 Yarn 框架執行 map-reduce 處理程式,詳細如下:
1. <property>
2. <name>dfs.nameservices</name>
3. <value>hadoop-cluster1</value>
4. </property>
5. <property>
6. <name>dfs.namenode.secondary.http-address</name>
7. <value>nameNode:50090</value>
8. </property>
9. <property>
10. <name>dfs.namenode.name.dir</name>
11. <value>file:///home/hadoop/dfs/name</value>
12. </property>
13. <property>
14. <name>dfs.datanode.data.dir</name>
15. <value>file:///home/hadoop/dfs/data</value>
16. </property>
17. <property>
18. <name>dfs.replication</name>
19. <value>2</value>
20. </property>
21. <property>
22. <name>dfs.webhdfs.enabled</name>
23. <value>true</value>
24. </property>
修改yarn-site.xml
<configuration>
<!--Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>nameNode:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>nameNode:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>nameNode:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>nameNode:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>nameNode:8088</value>
</property>
</configuration>
slaves
1. dataNode
修改JAVA_HOME
分別在檔案hadoop-env.sh和yarn-env.sh中新增JAVA_HOME配置
vihadoop-env.sh
1. export JAVA_HOME=/usr/java/jdk1.7.0_65
viyarn-env.sh
1. export JAVA_HOME=/usr/java/jdk1.7.0_65
6.5 格式化檔案系統
格式化檔案系統:
1. bin/hdfs namenode -format
輸出:
1. 14/09/21 11:57:22 INFO namenode.NameNode: STARTUP_MSG:
2. /************************************************************
3. STARTUP_MSG: Starting NameNode
4. STARTUP_MSG: host = nameNode/127.0.0.1
5. STARTUP_MSG: args = [-format]
6. STARTUP_MSG: version = 2.5.1
7. STARTUP_MSG: classpath = /home/hadoop-2.5.1/etc/hadoop:/home/hadoop-2.5.1/share/hadoop/common/lib/jackson-jaxrs-1.9.13.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/jackson-mapper-asl-1.9.13.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/jets3t-0.9.0.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/jersey-server-1.9.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/asm-3.2.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/guava-11.0.2.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/jetty-6.1.26.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/api-util-1.0.0-M20.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/xz-1.0.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/paranamer-2.3.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/commons-lang-2.6.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/api-asn1-api-1.0.0-M20.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/commons-beanutils-1.7.0.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/commons-codec-1.4.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/commons-math3-3.1.1.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/commons-beanutils-core-1.8.0.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/commons-configuration-1.6.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/jsch-0.1.42.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/netty-3.6.2.Final.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/jackson-xc-1.9.13.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/zookeeper-3.4.6.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/commons-cli-1.2.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/activation-1.1.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/commons-collections-3.2.1.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/jackson-core-asl-1.9.13.jar:/home/hadoop-2.5.1/share/hadoop/common/lib/hadoop-auth-2.5.1.jar:/home/hadoop-2.5.1/share/h