Java中集成ELK的使用小結(jié)
在 Java 應(yīng)用里運(yùn)用 ELK(Elasticsearch、Logstash、Kibana)技術(shù)棧,能夠?qū)崿F(xiàn)日志的集中化管理、高效搜索以及直觀可視化。下面將從基礎(chǔ)概念入手,逐步深入講解其使用方法。
一、基礎(chǔ)概念
ELK 技術(shù)棧由三款開源工具構(gòu)成:
- Elasticsearch:作為分布式搜索引擎,它基于 Lucene 開發(fā),具備強(qiáng)大的全文檢索和數(shù)據(jù)分析能力。
- Logstash:屬于數(shù)據(jù)收集引擎,可對(duì)多源數(shù)據(jù)進(jìn)行收集、過(guò)濾和轉(zhuǎn)換,然后將其發(fā)送至 Elasticsearch。
- Kibana:是一款可視化工具,借助它能對(duì) Elasticsearch 中的數(shù)據(jù)進(jìn)行查詢、分析并以直觀的圖表形式展示。
二、簡(jiǎn)單示例:在 Java 中集成 ELK
1. 添加 Maven 依賴
要在 Java 項(xiàng)目中使用 ELK,首先需要添加相應(yīng)的依賴。以下是在 Maven 項(xiàng)目中添加 Elasticsearch 客戶端依賴的代碼:
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.17.3</version>
</dependency>2. 創(chuàng)建 Elasticsearch 客戶端
下面的代碼展示了如何創(chuàng)建一個(gè) Elasticsearch 的高級(jí) REST 客戶端:
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
public class ElasticsearchConfig {
public static RestHighLevelClient createClient() {
return new RestHighLevelClient(
RestClient.builder(
new org.apache.http.HttpHost("localhost", 9200, "http")));
}
}3. 實(shí)現(xiàn)日志收集
使用 Logback 和 Logstash 實(shí)現(xiàn)日志收集的配置如下:
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpAppender">
<destination>localhost:5000</destination>
<encoder class="net.logstash.logback.encoder.LogstashEncoder" />
</appender>
<root level="info">
<appender-ref ref="LOGSTASH" />
</root>4. 配置 Logstash
Logstash 的配置文件logstash.conf示例如下:
input {
tcp {
port => 5000
codec => json_lines
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "java-app-logs-%{+YYYY.MM.dd}"
}
}三、中級(jí)應(yīng)用:實(shí)現(xiàn)復(fù)雜日志處理與監(jiān)控
1. 日志過(guò)濾與增強(qiáng)
在 Logstash 配置中添加過(guò)濾器,能夠?qū)崿F(xiàn)對(duì)日志的增強(qiáng)處理。以下是一個(gè)添加了過(guò)濾器的 Logstash 配置示例:
filter {
if [message] =~ /ERROR/ {
mutate {
add_tag => ["error"]
}
}
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{GREEDYDATA:message}" }
}
date {
match => [ "timestamp", "yyyy-MM-dd HH:mm:ss" ]
}
}2. 自定義指標(biāo)監(jiān)控
通過(guò) Micrometer 可以將應(yīng)用指標(biāo)發(fā)送到 Elasticsearch,代碼示例如下:
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MetricsConfig {
@Bean
MeterRegistryCustomizer<MeterRegistry> metricsCommonTags() {
return registry -> registry.config().commonTags("application", "my-java-app");
}
}四、高級(jí)應(yīng)用:性能優(yōu)化與集群部署
1. Elasticsearch 集群配置
Elasticsearch 的elasticsearch.yml集群配置示例如下:
cluster.name: my-application node.name: node-1 network.host: 0.0.0.0 http.port: 9200 discovery.seed_hosts: ["host1", "host2"] cluster.initial_master_nodes: ["node-1", "node-2"]
2. 性能優(yōu)化
為了優(yōu)化 Elasticsearch 的性能,可以進(jìn)行以下配置調(diào)整:
indices.memory.index_buffer_size: 30% search.max_buckets: 100000 bootstrap.memory_lock: true
3. 安全配置
保障 ELK 安全的配置示例如下:
xpack.security.enabled: true xpack.security.transport.ssl.enabled: true xpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.keystore.path: elastic-certificates.p12 xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
五、Kibana 可視化
在 Kibana 中創(chuàng)建可視化圖表的 DSL 示例:
{
"aggs": {
"by_level": {
"terms": {
"field": "level.keyword",
"size": 10
},
"aggs": {
"by_hour": {
"date_histogram": {
"field": "@timestamp",
"calendar_interval": "hour"
}
}
}
}
},
"size": 0
}六、與 Spring Boot 集成
1. 自動(dòng)配置
在 Spring Boot 項(xiàng)目中使用 ELK 的自動(dòng)配置,需要添加以下依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>2. 配置文件
application.properties配置示例:
spring.elasticsearch.rest.uris=http://localhost:9200 management.metrics.export.elastic.enabled=true management.metrics.export.elastic.host=http://localhost:9200
七、故障排查與最佳實(shí)踐
1. 常見問(wèn)題
- 檢查 Elasticsearch 日志:
/var/log/elasticsearch/ - 監(jiān)控集群健康狀態(tài):
GET /_cluster/health - 分析慢查詢:
GET /_nodes/stats/indices/search
2. 最佳實(shí)踐
- 按照時(shí)間對(duì)索引進(jìn)行分片,例如按天或按月。
- 對(duì)歷史數(shù)據(jù)進(jìn)行滾動(dòng)處理,以節(jié)省空間。
- 為提高查詢速度,合理設(shè)置字段映射。
- 定期進(jìn)行索引優(yōu)化。
八、總結(jié)
通過(guò)上述內(nèi)容,我們?nèi)媪私饬?ELK 在 Java 應(yīng)用中的使用方法:
- 從基礎(chǔ)概念出發(fā),認(rèn)識(shí)了 ELK 技術(shù)棧的三個(gè)核心組件。
- 學(xué)習(xí)了在 Java 項(xiàng)目中集成 ELK 的基本步驟。
- 掌握了中級(jí)應(yīng)用中日志過(guò)濾與增強(qiáng)以及自定義指標(biāo)監(jiān)控的方法。
- 了解了高級(jí)應(yīng)用中集群部署、性能優(yōu)化和安全配置的要點(diǎn)。
- 學(xué)習(xí)了 Kibana 可視化的相關(guān)知識(shí)。
- 掌握了與 Spring Boot 集成的方法。
- 了解了故障排查的常見方法和最佳實(shí)踐。
通過(guò)合理運(yùn)用 ELK 技術(shù)棧,可以顯著提升 Java 應(yīng)用的可觀測(cè)性和運(yùn)維效率
到此這篇關(guān)于Java中集成ELK的使用小結(jié)的文章就介紹到這了,更多相關(guān)Java集成ELK內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java基礎(chǔ)之Collection與Collections和Array與Arrays的區(qū)別
這篇文章主要介紹了java基礎(chǔ)之Collection與Collections和Array與Arrays的區(qū)別的相關(guān)資料,本文主要說(shuō)明兩者的區(qū)別以防大家混淆概念,需要的朋友可以參考下2017-08-08
Spring?Boot?詳細(xì)分析Conditional自動(dòng)化配置注解
首先我們先了解一下@Conditional注解,@Conditional是Spring4新提供的注解,它的作用是按照一定的條件進(jìn)行判斷,需要注入的Bean滿足給定條件才可以注入到Spring?IOC容器中2022-07-07
詳解SpringBoot中的統(tǒng)一功能處理的實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了SpringBoot如何實(shí)現(xiàn)統(tǒng)一功能處理,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定借鑒價(jià)值,需要的可以參考一下2023-01-01
Java自定義簡(jiǎn)單標(biāo)簽實(shí)例
Java自定義簡(jiǎn)單標(biāo)簽可以方便的在頁(yè)面輸出信息,并且對(duì)于權(quán)限的控制,和對(duì)于Jsp標(biāo)簽和servlet代碼的分離有著很好的作用2013-07-07
Java和Ceylon對(duì)象的構(gòu)造和驗(yàn)證
這篇文章主要為大家詳細(xì)介紹了Java和Ceylon對(duì)象的構(gòu)造和驗(yàn)證,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
Spring Boot 中的任務(wù)執(zhí)行器基本概念及使用方法
務(wù)執(zhí)行器是 Spring Boot 中的一個(gè)非常實(shí)用的模塊,它可以簡(jiǎn)化異步任務(wù)的開發(fā)和管理,在本文中,我們介紹了任務(wù)執(zhí)行器的基本概念和使用方法,以及一個(gè)完整的示例代碼,需要的朋友可以參考下2023-07-07
MyBatis超詳細(xì)講解如何實(shí)現(xiàn)分頁(yè)功能
MyBatis-Plus?是一個(gè)?Mybatis?增強(qiáng)版工具,在?MyBatis?上擴(kuò)充了其他功能沒(méi)有改變其基本功能,為了簡(jiǎn)化開發(fā)提交效率而存在,本篇文章帶用它實(shí)現(xiàn)分頁(yè)功能2022-03-03
shrio中hashedCredentialsMatcher密碼匹配示例詳解
shrio是一個(gè)輕量級(jí)權(quán)限管理框架,密碼的匹配由框架內(nèi)部完成。密碼是否匹配由接口CredentialsMatcher定義實(shí)現(xiàn)類完成,CredentialsMatcher實(shí)現(xiàn)類有SimpleCredentialsMatcher和HashedCredentialsMatcher兩個(gè)2021-10-10
SpringBoot實(shí)現(xiàn)賬號(hào)登錄錯(cuò)誤次數(shù)的限制和鎖定功能
本文介紹了如何使用SpringBoot和Redis實(shí)現(xiàn)賬號(hào)登錄錯(cuò)誤次數(shù)限制和鎖定功能,通過(guò)自定義注解和AOP切面,結(jié)合配置文件靈活設(shè)置最大嘗試次數(shù)和鎖定時(shí)長(zhǎng),感興趣的朋友跟隨小編一起看看吧2024-12-12

