什么是ELK横殴?
通俗來講衫仑,ELK是由Elasticsearch堕花、Logstash、Kibana 缘挽、filebeat三個開源軟件的組成的一個組合體呻粹,這三個軟件當(dāng)中,每個軟件用于完成不同的功能等浊,ELK 又稱為ELK stack摹蘑,官方域名為stactic.co,ELK stack的主要優(yōu)點(diǎn)有如下幾個:
處理方式靈活: elasticsearch是實(shí)時全文索引撒踪,具有強(qiáng)大的搜索功能
配置相對簡單:elasticsearch全部使用JSON 接口大渤,logstash使用模塊配置,kibana的配置文件部分更簡單忍捡。
檢索性能高效:基于優(yōu)秀的設(shè)計切黔,雖然每次查詢都是實(shí)時具篇,但是也可以達(dá)到百億級數(shù)據(jù)的查詢秒級響應(yīng)。
集群線性擴(kuò)展:elasticsearch和logstash都可以靈活線性擴(kuò)展
前端操作絢麗:kibana的前端設(shè)計比較絢麗诗芜,而且操作簡單
什么是Elasticsearch:
是一個高度可擴(kuò)展的開源全文搜索和分析引擎埃疫,它可實(shí)現(xiàn)數(shù)據(jù)的實(shí)時全文搜索搜索、支持分布式可實(shí)現(xiàn)高可用翠桦、提供API接口胳蛮,可以處理大規(guī)模日志數(shù)據(jù),比如Nginx斗幼、Tomcat抚垄、系統(tǒng)日志等功能谋逻。
什么是Logstash
可以通過插件實(shí)現(xiàn)日志收集和轉(zhuǎn)發(fā)斤贰,支持日志過濾次询,支持普通log、自定義json格式的日志解析送巡。
什么是kibana:
主要是通過接口調(diào)用elasticsearch的數(shù)據(jù)盒卸,并進(jìn)行前端數(shù)據(jù)可視化的展現(xiàn)。
什么是Beats
Beats在這里是一個輕量級日志采集器摘投,其實(shí)Beats家族有6個成員虹蓄,早期的ELK架構(gòu)中使用Logstash收集、解析日志外臂,但是Logstash對內(nèi)存律胀、cpu、io等資源消耗比較高罪佳。相比 Logstash黑低,Beats所占系統(tǒng)的CPU和內(nèi)存幾乎可以忽略不計
為什么使用 ELK投储?
ELK組件在海量日志系統(tǒng)的運(yùn)維中,可用于解決以下主要問題:
- 分布式日志數(shù)據(jù)統(tǒng)一收集娇掏,實(shí)現(xiàn)集中式查詢和管理
- 故障排查
- 安全信息和事件管理
- 報表功能
ELK組件在大數(shù)據(jù)運(yùn)維系統(tǒng)中勋眯,主要可解決的問題如下:
- 日志查詢下梢,問題排查塞蹭,故障恢復(fù)番电,故障自愈
- 應(yīng)用日志分析,錯誤報警
- 性能分析漱办,用戶行為分析
一娩井、elasticsearch部署:
去百度如何創(chuàng)建普通用戶
1.1:環(huán)境初始化:
IP:命令行敲ifconfig
自己瞅兼搏,瞅完記住
主機(jī)名:node-1
系統(tǒng):CentOS 7
Java:1.8.0_172
elasticsearch:6.6.0
1.2: 獲取elasticsearch-6.6.0
https://www.elastic.co/downloads/
下載安裝ELK組件
[root@mha-master data]# wget https://artifacts.elastic.co/downloads/logstash/logstash-6.6.0.tar.gz
[root@mha-master data]# wget https://artifacts.elastic.co/downloads/kibana/kibana-6.6.0-linux-x86_64.tar.gz
[root@mha-master data]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.0.tar.gz
[root@mha-master data]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.6.0-linux-x86_64.tar.gz
如果沒按照我的方法安裝沙郭,一定要記得你這三個用的版本要一致!
然后看機(jī)器上有沒有java
java -version
顯示為1.8以上就可以了吓著,如果沒有的話就按照下面這行去安裝
yum install -y java-1.8.0-openjdk-devel java-1.8.0-openjdk
然后開始解壓安裝然后配置
tar xf elasticsearch-6.6.0.tar.gz
cd elasticsearch-6.6.0/config
vi elasticsearch.yml # 編輯內(nèi)容
編輯后看到所有行都被注釋掉了內(nèi)容改為
cluster.name: my-ELK
node.name: node-1
path.data: /data/ELK/elasticsearch/data #當(dāng)然這個目錄可以你自己定
path.logs: /data/ELK/elasticsearch/log #當(dāng)然這個目錄可以你自己定
network.host: 你這臺的ip
http.port: 9200
discovery.zen.ping.unicast.hosts: ["你的ip"]
http.cors.enabled: true # 開放插件head訪問
http.cors.allow-origin: "*" # 開放插件head訪問
那么現(xiàn)在文件夾都指定了绑莺,這兩個文件夾還沒有呢,所以現(xiàn)在開始建文件夾
mkdir -p /data/ELK/elasticsearch/data
mkdir -p /data/ELK/elasticsearch/log
如果創(chuàng)建失敗诫肠,說明你這個賬戶沒有動/data
目錄的權(quán)限
sudo chown -R 你的用戶名:你的用戶組名 /data
然后打開文件夾并啟動
cd elasticsearch-6.6.0
./bin/elasticsearch &
可能會出現(xiàn)異常
一欺缘、
- max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
- 異常原因:單進(jìn)程可打開文件數(shù)不夠
- 解決辦法:
sudo vim /etc/security/limits.conf
在最下面一行添加(具體數(shù)值看你報錯的數(shù)浪南,按照他推薦的來):
elastic soft nofile 65536 # 軟限制,小于等于下面的數(shù)值
elastic hard nofile 65536 # 硬限制
返回后重新登錄該賬戶(不然數(shù)量不變化)
ulimit -Hn # 查看數(shù)量是否為65536
二骡送、
- max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
- 異常原因:jvm最大進(jìn)程數(shù)低
- 解決辦法:
sudo vim /etc/sysctl.conf
然后添加下面這行
vm.max_map_count=655360
保存退出絮记,然后查看
sysctl -p # 顯示的數(shù)量為更改后的就沒問題了
三、(我的服務(wù)器并未報這個異常)
- memory locking requested for elasticsearch process but memory is not locked
- 解決辦法:
vim /etc/security/limits.conf
elastic - memlock unlimited
四派敷、(我的服務(wù)器并未報這個異常)
- max number of threads [3802] for user [elastic] is too low, increase to at least [4096]
- 解決辦法:
$ vim /etc/security/limits.d/20-nproc.conf
elastic - nproc 4096
最后敲下面這行命令如果顯示下面這樣的json就算成功了
curl http://192.168.1.58:9200
{
"name" : "node-1",
"cluster_name" : "my-ELK",
"cluster_uuid" : "Frii070FSEKiOSYlE86lOg",
"version" : {
"number" : "6.6.0",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "a9861f4",
"build_date" : "2019-01-24T11:27:09.439740Z",
"build_snapshot" : false,
"lucene_version" : "7.6.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
安裝head插件(安裝完就可以在瀏覽器顯示了)
安裝git
檢查是否已安裝
git --version
如果啥也沒有則安裝:
yum install -y git
安裝npm
檢查是否已安裝
npm -v
如果啥也沒有則安裝:
yum install -y npm
該有的都有了之后開始安裝
git clone https://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head/
sudo npm install -g grunt-cli
sudo npm install # 這一步我報錯了篮愉,安裝phantomjs錯誤差导,但是無大礙设褐。
修改Gruntfile.js:
connect: {
server: {
options: {
port: 9100,
hostname: "*", # 新增
base: '.',
keepalive: true
}
}
}
});
修改_site/app.js # 如果不好找這一行,進(jìn)入vi后非編輯狀態(tài)下輸入/localhost就找到了
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://你的ip:9200"; # 修改為自己的服務(wù)
grunt server #啟動命令
elasticsearch和插件部署完畢犀被!
參考博客