ELK入門使用-與springboot集成


前言

ELK官方的中文文檔寫的已經挺好了,為啥還要記錄本文?因為我發現,我如果不寫下來,過幾天就忘記了,而再次撿起來必然還要經歷資料查找篩選測試的過程。雖然這個過程很有意義,但並不總是有那么多時間去做。因此,接下來的內容僅僅是我根據查詢到的資料,篩選,組裝,測試后達到我的目標的一個過程。

什么是ELK

K我最初還以為是Kafka,事實上,ELK平台是一個完整的日志分析解決方案,由這三個開源工具構建而成:Elasticsearch、Logstash、Kibana。

Elasticsearch用於深度搜索和數據分析,它是基於Apache Lucene的分布式開源搜索引擎,無須預先定義數據結構就能動態地對數據進行索引;

Logstash用於日志集中管理,包括從多台服務器上傳輸和轉發日志,並對日志進行豐富和解析,是一個數據管道,提供了大量插件來支持數據的輸入和輸出處理;

最后是Kibana,提供了強大而美觀的數據可視化,Kibana完全使用HTML和Javascript編寫,它利用Elasticsearch 的RESTful API來實現其強大的搜索能力,將結果顯示位各種震撼的圖形提供給最終的用戶。

關系圖

安裝Elasticsearch

官網下載對應平台的安裝包。

Windows用法比較簡單,只要下載后雙機bin/elasticsearch.bat就啟動成功了. 下面關注linux上的安裝使用。

ES不允許root運行,所以,最好我們創建專門的用戶來運行。

解壓后,運行./bin/elasticsearch就會啟動成功。如果失敗,應該是用root啟動的,改成普通用戶即可。

然后瀏覽器訪問:http://localhost:9200/ 可以看到響應

{
    "name": "ZSedUub",
    "cluster_name": "elasticsearch",
    "cluster_uuid": "_pS5AOR4Rf2oGPk5uRKK-A",
    "version": {
        "number": "6.2.4",
        "build_hash": "ccec39f",
        "build_date": "2018-04-12T20:37:28.497551Z",
        "build_snapshot": false,
        "lucene_version": "7.2.1",
        "minimum_wire_compatibility_version": "5.6.0",
        "minimum_index_compatibility_version": "5.0.0"
    },
    "tagline": "You Know, for Search"
}

安裝Kibana

官網下載對應平台的安裝包。然后,解壓。
啟動:

./bin/kibana

瀏覽器訪問: http://localhost:5601

安裝logstash

官網下載對應平台的安裝包。然后,解壓。

這里采用壓縮包的方式,當然也可以使用系統安裝包,比如

//ubuntu
sudo apt-get update && sudo apt-get install logstash

centos

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

在/etc/yum.repos.d/ 新建logstash.repo

[logstash-6.x]
name=Elastic repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md


sudo yum install logstash

甚至docker。

修改ruby倉庫地址為中國:編輯Gemfile

修改為source "https://gems.ruby-china.com/"

啟動: bin/logstash -e 'input { stdin { } } output { stdout {} }'

這是一個交互式輸入,你輸入的內容將被當做message收集起來。

test
{
       "message" => "test",
      "@version" => "1",
    "@timestamp" => 2018-05-26T14:29:09.212Z,
          "host" => "ryan-900X5L"
}

到這里就算安裝成功了。

遇到的問題,

Unsupported platform: x86_64-linux

原因是Java9不支持,卸載Java9即可。

安裝logstash-codec-json_lines插件

ryan@ryan-900X5L:~/apps/logstash-6.2.4$ ./bin/logstash-plugin install logstash-codec-json_lines
Validating logstash-codec-json_lines
Installing logstash-codec-json_lines
Installation successful

接下來,我們直接編寫我們springboot需要的配置方案,新建config/logstash-sample.conf

input {
    tcp {
        port => 4560
        codec => json_lines
    }
}
output{
  elasticsearch { 
     hosts => ["localhost:9200"] 
     index => "%{[appName]}-%{+YYYY.MM.dd}" #用一個項目名稱來做索引
  }
  stdout { codec => rubydebug }
}
  • 4560 是logstash接收數據的端口
  • codec => json_lines是一個json解析器,接收json的數據。這個要裝 logstash-codec-json_lines 插件
  • ouput elasticsearch指向我們安裝的地址
  • stdout會打印收到的消息,調試用

啟動:

./bin/logstash -f config/logstash-sample.conf 

新建一個springboot項目

項目地址: https://github.com/Ryan-Miao/springboot-with-elk

pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.test</groupId>
	<artifactId>springboot-with-elk</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>springboot-with-elk</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.2.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>


		<dependency>
			<groupId>net.logstash.logback</groupId>
			<artifactId>logstash-logback-encoder</artifactId>
			<version>5.1</version>
		</dependency>


		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>


</project>

新建啟動類


@SpringBootApplication
public class SpringbootWithElkApplication implements CommandLineRunner {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootWithElkApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        Logger logger = LoggerFactory.getLogger(SpringbootWithElkApplication.class);
        logger.info("測試log");

        for (int i = 0; i < 10; i++) {
            logger.error("something wrong. id={}; name=Ryan-{};", i, i);
        }
    }
}

在resources下新建logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration>
<configuration>
  <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
    <destination>localhost:4560</destination>
    <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
  </appender>

  <include resource="org/springframework/boot/logging/logback/base.xml"/>

  <root level="INFO">
    <appender-ref ref="LOGSTASH" />
    <appender-ref ref="CONSOLE" />
  </root>

</configuration>

啟動。然后就可以觀察到,logsash控制台打印我們的日志

{
       "@version" => "1",
    "thread_name" => "restartedMain",
        "message" => "something wrong. id=9; name=Ryan-9;",
    "logger_name" => "com.test.springbootwithelk.SpringbootWithElkApplication",
    "level_value" => 40000,
     "@timestamp" => 2018-05-26T15:21:05.109Z,
           "host" => "localhost",
          "level" => "ERROR",
           "port" => 34902
}

在kibana- management - index pattern里新建一個pattern,我們就用*吧。創建好了,點擊discover。就可以看到我們的日志了

到這里,hello world完成。當然還要繼續高級配置和查詢啥的,后面再說。

參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM