轉(zhuǎn)自:https://mp.weixin.qq.com/s?__biz=MzAxODcyNjEzNQ==&mid=2247484140&idx=2&sn=c48a3144aa11d7acb7ebbe2539902b2e&chksm=9bd0af74aca72662638579bebe27a17bc211819c4023d250b015dca5cdeeea08b4efc83b5a57&mpshare=1&scene=1&srcid=08294kC84XBsaUHTrmvjEpCb#rd
原創(chuàng)?2017-08-25?李東?程序猿DD
今天給大家?guī)淼氖莑ogback+ELK+SpringMVC 日志收集服務(wù)器搭建。接下來我會介紹ELK是什么?logback是什么扛芽?以及搭建的流程。
1.ELK是什么痹筛?
ELK是由Elasticsearch银萍、Logstash、Kibana這3個軟件的縮寫患整。
Elasticsearch是一個分布式搜索分析引擎眯停,穩(wěn)定济舆、可水平擴展、易于管理是它的主要設(shè)計初衷
Logstash是一個靈活的數(shù)據(jù)收集莺债、加工和傳輸?shù)墓艿儡浖?/p>
Kibana是一個數(shù)據(jù)可視化平臺滋觉,可以通過將數(shù)據(jù)轉(zhuǎn)化為酷炫而強大的圖像而實現(xiàn)與數(shù)據(jù)的交互將三者的收集加工,存儲分析和可視轉(zhuǎn)化整合在一起就形成了 ELK 齐邦。
2.ELK流程
ELK的流程應(yīng)該是這樣的:Logback->Logstash->(Elasticsearch<->Kibana)
應(yīng)用程序產(chǎn)生出日志椎侠,由logback日志框架進行處理。
將日志數(shù)據(jù)輸出到Logstash中
Logstash再將數(shù)據(jù)輸出到Elasticsearch中
Elasticsearch再與Kibana相結(jié)合展示給用戶
3.ELK官網(wǎng)
https://www.elastic.co/guide/index.html
4. 環(huán)境配置
4.1 基礎(chǔ)環(huán)境
jdk 1.8
Centos 7.0 X86-64 注意:ELK服務(wù)不能在root用戶開啟措拇。需要重新創(chuàng)建用戶我纪。 下載ELK相關(guān)服務(wù)壓縮包 創(chuàng)建ELK用戶和目錄并賦予權(quán)限,方便統(tǒng)一管理。
[root@localhost /]# mkdir elsearch
[root@localhost /]# groupadd ?elsearch
[root@localhost /]# useradd -g elsearch elsearch
[root@localhost /]# chown -R elsearch:elsearch /elsearch
[root@localhost /]# su elsearch
[elk@localhost /]$ cd elsearch
4.2 下載,然你也可以去官網(wǎng)找最新版的
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.2.2.tar.gz
wget https://artifacts.elastic.co/downloads/logstash/logstash-5.2.2.tar.gz
wget https://artifacts.elastic.co/downloads/kibana/kibana-5.2.2-linux-x86_64.tar.gz
我這里是以5.2.2為例來實現(xiàn)丐吓。
4.3 配置Elasticsearch
Elasticsearch是可以搭建集群,我這邊只是解壓后直接修改配置文件
elasticsearch.yml
cluster.name: es_cluster_1
node.name: node-1
path.data: /usr/local/services/elasticsearch-5.2.2/data ? ? ? ? ? ? ?
path.logs:/usr/local/services/elasticsearch-5.2.2/logs
network.host: 192.168.10.200
http.port: 9200
啟動ElasticSearch,訪問http://192.168.10.200:9200/
看到如上的界面就代表啟動成功浅悉。
注意:安裝過程中出現(xiàn)一些問題。在這篇文章中已經(jīng)都給我們解決了券犁。
http://www.cnblogs.com/sloveling/p/elasticsearch.html
4.4 配置logstash
解壓
tar -zxvf /usr/local/services/logstash-5.2.2.tar.gz
測試配置,只是測試服務(wù)是否啟動术健。還有這個文件是沒有的,啟動時加上這個路徑就是以這個配置啟動
vi /usr/local/services/logstash-5.2.2/config/logstash.conf
input {
stdin { }
}
output {
stdout {
codec => rubydebug {}
}
}
logstash以配置文件方式啟動有兩種:
列表內(nèi)容 logstash -f logstash-test.conf //普通方式啟動
logstash agent -f logstash-test.conf --debug//開啟debug模式
./bin/logstash -f config/logstash.conf --debug
啟動成功會看到如下的結(jié)果:
這是時候,我們在控制臺隨便輸入都可以被收集
n"=>"1", "host"=>"localhost", "message"=>"我們都是好好"}}
{
? ?"@timestamp" => 2017-08-18T05:45:25.340Z,
? ? ?"@version" => "1",
? ? ? ? ?"host" => "localhost",
? ? ? "message" => "我們都是好好"
}
[2017-08-18T13:45:26,933][DEBUG][logstash.pipeline ? ? ? ?] Pushing flush onto pipeline
[2017-08-18T13:45:31,934][DEBUG][logstash.pipeline ? ? ? ?] Pushing flush onto pipeline
4.5 配置logstash
配置kibana
解壓
[elsearch@localhost root]$ tar -zxvf /usr/local/services/kibana-5.2.2-linux-x86_64.tar.gz
打開配置
[elsearch@localhost root]$ vim /usr/local/services/kibana-5.2.2-linux-x86_64/config/kibana.yml
修改配置,最后最加
server.port: 8888
server.host: "192.168.10.200"
elasticsearch.url: "http://192.168.10.200:9200"
啟動
[elsearch@localhost root]$ /usr/local/services/kibana-5.2.2-linux-x86_64/bin/kibana &
訪問地址 http://192.168.10.200:8888
基本ELK的環(huán)境的搭建就ok了,我們接下來學(xué)習(xí)logback-ELK整合來收集JavaEE中的日志粘衬。
4.6 logback-ELK整合
4.6.1 本案列采用maven管理
pom.xml
4.6.2配置logaback的配置文件
注意:logstash接收日志的地址192.168.10.200:8082
4.6.3配置logstash-test.conf
vi logstash-test.conf
input {
tcp {
? ? ? ?host => "192.168.10.200"
? ? ? ?port => 8082
? ? ? ?mode => "server"
? ? ? ?ssl_enable => false
? ? ? ?codec => json {
? ? ? ? ? ?charset => "UTF-8"
? ? ? ?}
? ?}
}
output {
? ?elasticsearch {
? ?hosts => "192.168.10.200:9200"
? ?index => "logstash-test"
? ?}
?stdout { codec => rubydebug {} }
}
啟動收集
./bin/logstash -f config/logstash-test.conf --debug
4.6.4配置Controller添加日志輸出
package com.example.demo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestEndpoints {
? ?private final static Logger logger = LoggerFactory.getLogger(TestEndpoints.class);
? ?@GetMapping("/product/{id}")
? ?public String getProduct(@PathVariable String id) {
? ? ? ?String data = "{\"name\":\"李東\"}";
? ? ? ?logger.info(data);
? ? ? ?return "product id : " + id;
? ?}
? ?@GetMapping("/order/{id}")
? ?public String getOrder(@PathVariable String id) {
? ? ? ?return "order id : " + id;
? ?}
}
請求調(diào)用之后控制臺的log
之后Kibana中就可以收集到log
{
?"_index": "logstash-test",
?"_type": "logs",
?"_id": "AV3zu4jiJKLF9tWSjmZj",
?"_score": null,
?"_source": {
? ?"@timestamp": "2017-08-18T05:04:51.698Z",
? ?"level": "INFO",
? ?"port": 56525,
? ?"thread_name": "http-nio-8081-exec-10",
? ?"level_value": 20000,
? ?"@version": 1,
? ?"host": "192.168.10.165",
? ?"logger_name": "com.example.demo.TestEndpoints",
? ?"message": "{\"name\":\"李東\"}"
?},
?"fields": {
? ?"@timestamp": [
? ? ?1503032691698
? ?]
?},
?"sort": [
? ?1503032691698
?]
}