第七章 ELK Stack高级应用与集成
目录
- 微服务架构集成
- 云平台部署
- 第三方工具集成
- 机器学习应用
- 安全分析
- APM性能监控
- 数据管道优化
- 企业级解决方案
微服务架构集成
1. 微服务日志聚合架构
2. 分布式追踪集成
Jaeger集成配置:
# docker-compose.yml
version: '3.8'
services:jaeger:image: jaegertracing/all-in-one:latestports:- "16686:16686"- "14268:14268"environment:- COLLECTOR_OTLP_ENABLED=true- SPAN_STORAGE_TYPE=elasticsearch- ES_SERVER_URLS=http://elasticsearch:9200depends_on:- elasticsearchelasticsearch:image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0environment:- discovery.type=single-node- xpack.security.enabled=falseports:- "9200:9200"kibana:image: docker.elastic.co/kibana/kibana:8.11.0ports:- "5601:5601"environment:- ELASTICSEARCH_HOSTS=http://elasticsearch:9200depends_on:- elasticsearchlogstash:image: docker.elastic.co/logstash/logstash:8.11.0volumes:- ./logstash/pipeline:/usr/share/logstash/pipeline- ./logstash/config:/usr/share/logstash/configports:- "5044:5044"depends_on:- elasticsearch
Spring Boot微服务集成:
// pom.xml
<dependencies><dependency><groupId>io.opentelemetry</groupId><artifactId>opentelemetry-api</artifactId></dependency><dependency><groupId>io.opentelemetry</groupId><artifactId>opentelemetry-exporter-jaeger</artifactId></dependency><dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>7.4</version></dependency>
</dependencies>// TracingConfiguration.java
@Configuration
public class TracingConfiguration {@Beanpublic OpenTelemetry openTelemetry() {return OpenTelemetrySdk.builder().setTracerProvider(SdkTracerProvider.builder().addSpanProcessor(BatchSpanProcessor.builder(JaegerGrpcSpanExporter.builder().setEndpoint("http://jaeger:14250").build()).build()).setResource(Resource.getDefault().merge(Resource.create(Attributes.of(ResourceAttributes.SERVICE_NAME, "user-service")))).build()).build();}
}// UserController.java
@RestController
@RequestMapping("/api/users")
public class UserController {private static final Logger logger = LoggerFactory.getLogger(UserController.class);private final Tracer tracer;public UserController(OpenTelemetry openTelemetry) {this.tracer = openTelemetry.getTracer("user-service");}@GetMapping("/{id}")public ResponseEntity<User> getUser(@PathVariable Long id) {Span span = tracer.spanBuilder("get-user").setAttribute("user.id", id).startSpan();try (Scope scope = span.makeCurrent()) {logger.info("Getting user with id: {}", id);// 业务逻辑User user = userService.findById(id);span.setStatus(StatusCode.OK);return ResponseEntity.ok(user);} catch (Exception e) {span.setStatus(StatusCode.ERROR, e.getMessage());logger.error("Error getting user: {}", e.getMessage(), e);throw e;} finally {span.end();}}
}
Logback配置:
<!-- logback-spring.xml -->
<configuration><include resource="org/springframework/boot/logging/logback/defaults.xml"/><springProfile name="!local"><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"><providers><timestamp/><logLevel/><loggerName/><message/><mdc/><arguments/><stackTrace/><pattern><pattern>{"service": "user-service","version": "${app.version:-unknown}","environment": "${spring.profiles.active:-unknown}","trace_id": "%X{traceId:-}","span_id": "%X{spanId:-}"}</pattern></pattern></providers></encoder></appender></springProfile><springProfile name="local"><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level [%X{traceId:-},%X{spanId:-}] %logger{36} - %msg%n</pattern></encoder></appender></springProfile><root level="INFO"><appender-ref ref="STDOUT"/></root>
</configuration>
3. 服务网格集成
Istio + ELK集成:
# istio-telemetry.yaml
apiVersion: telemetry.istio.io/v1alpha1
kind