logstash+elasticsearch+kibana分布式叢集日志收集系統
GITHUB位址!
logstash+elasticsearch+kibana分布式叢集日志收集系統,超級詳細!最快上手!
名稱 | 版本 |
---|---|
kibana | 5.6.8 |
elasticsearch | 5.6.8 |
kafka | 2.11-1.0.0 |
logstash | 6.2.3 |
啟動kafka,建立topic
- cd kafka解壓後的目錄内
- 運作bin/zookeeper-server-start.sh config/zookeeper.properties &
- 運作bin/kafka-server-start.sh config/server.properties &
-
建立topic
bin/kafka-topics.sh --create --zookeeper localhost:2181 --topic 你的topic名稱 --partirion 1 --replication-factor 1
-
檢查topic
bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic 你的topic名稱
配置log4j2,搭建項目
- 配置maven依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <!-- 去除springboot自帶的日志 --> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>
- 建立日志測試類
@RestController @RequestMapping("/api") public class DemoController { private static Logger logger = LoggerFactory.getLogger(DemoApplication.class); @RequestMapping("/hello") public void hello() throws Exception { logger.info("invoke hello!"); throw new Exception("test invoke hello occur exception"); } }
- 配置log4j2
- application.yml
server.port=8800 logging.config=classpath:log4j-spring-kafka.xml
- 建立log4j-spring-kafka.xml
<?xml version="1.0" encoding="UTF-8"?> <!--日志級别以及優先級排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL --> <Configuration status="OFF"> <Appenders> <!-- 輸出控制台日志的配置 --> <Console name="console" target="SYSTEM_OUT"> <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/> <!-- 輸出日志的格式 --> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> <Kafka name="Kafka" topic="你的伺服器收集日志的topic名稱"> <PatternLayout pattern="%date %message"/> <Property name="bootstrap.servers">kafka伺服器ip:kafka監聽端口</Property> </Kafka> </Appenders> <Loggers> <Root level="ALL"> <AppenderRef ref="Kafka"/> <AppenderRef ref="console"/> </Root> <Logger name="org.apache.kafka" level="INFO"/> <logger name="org.springframework" level="INFO"/> </Loggers> </Configuration>
- application.yml
- 伺服器執行下面的指令消費指定topic,kafka
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic serverlogs --from-beginning
- 啟動項目,此時應該可以看到kafka已經列印出來了啟動日志!
安裝logstash,elasticsearch,kibana
- 網上教程極多,就不介紹如何安裝qaq
- 由于自己的機子是2g的記憶體,是以說用的滿滿當當,這幾個元件都挺能搶記憶體的,elasticsearch預設就要2g記憶體…個人最終是elasticsearch(400m)+logstash(400m)+其他,這個注意調整不然申請記憶體不夠必報錯
- 安裝的時候基本的錯誤基本都能看到錯誤描述,也好解決
- 配置檔案格式錯
- 擴充辨別符數量ulimit -Hn 66666
- 配置設定權限 chmod -R 777 檔案夾
- elasticsearch不能在root使用者下運作,要建立使用者newuser,然後 su newuser,拷貝安裝包到/usr目錄下cd到指定目錄啟動elasticsearch
- …
- 系統架構圖
- logstash配置檔案
input { kafka { bootstrap_servers => ["你的kafka伺服器位址:9092"] topics => ["serverlogs"] type => "log4j-json" } } output { stdout { codec => rubydebug } elasticsearch { hosts => ["你的elasticsearch伺服器位址:9200"] index => "applogstash-%{+YYYY.MM.dd.HH}" } }
效果展示
本地啟動項目
[外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-8SJQeXiw-1590910536343)(http://118.31.11.163:6868/files/image-20200530235326592.png)]
Management裡填寫 applogstash-* 就可以看到日志!(不要勾選@timestamp!)
[外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-x9arg8op-1590910536344)(http://118.31.11.163:6868/files/image-20200530235207128.png)]
TODO list
- 加上過濾器,把資料标準格式化
- 能不能把nginx日志配置到裡面,也不難,讀取file就可以
- 叢集化,其實就是幾個zk互相注冊,幾個kafka提供消息服務,配置好ip和參數就可以
- 內建到已有項目,盡量無侵入
更新
- logstash配置檔案
input { kafka { bootstrap_servers => ["你的kafka伺服器位址:9092"] topics => ["serverlogs"] type => "json" } } filter { grok { patterns_dir => ["/root/logstash-6.2.3/patterns"] match => { "message" => "%{TIMESTAMP_ISO8601:timestamp}\[%{MY_THREAD:threadname}\]\s%{LOGLEVEL:loglevel}\s\s\[%{MY_METHOD:method}\]\s-\s%{MY_MSG:information}" } } } output { stdout { codec => rubydebug } elasticsearch { hosts => ["你的elasticsearch伺服器位址:9200"] index => "applogstash-%{+YYYY.MM.dd.HH}" } }
- log4j2配置
<Kafka name="Kafka" topic="serverlogs"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS}[%t] %-5level [%l] - %msg"/> <Property name="bootstrap.servers">你的kafka伺服器位址:9092</Property> </Kafka>