elk日志上报

ELK堆栈实现Nginx日志收集与分析
本文介绍了ELK(Elasticsearch, Logstash, Kibana)日志管理解决方案,详细讲解了如何通过Filebeat收集,Logstash处理和解析Nginx日志,Elasticsearch存储以及Kibana进行可视化展示。在实践过程中,还涵盖了常见的安装和配置问题及其解决方法。" 2551114,265542,数据库中text转varchar500的解决方案,"['数据库管理', 'SQL编程', '数据类型']

(一)ELK介绍:

Elasticsearch + Logstash + Kibana(ELK)是一套开源的日志管理方案
Logstash:负责日志的收集,处理和储存
Elasticsearch:负责日志检索和分析
Kibana:负责日志的可视化

工作流程:

elk

nginx日志格式分析

log_format  main  '$host $remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent $upstream_response_time "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for" "$uid_got" "$uid_set" "$http_x_tencent_ua" "$upstream_addr"';

解析nginx日志格式

$host           客户端请求的时输入域名或IP
$remote_addr    客户端的IP
$remote_user    客户的名称
[$time_local]   发送请求时的本地时间
$request        请求的url和使用http协议版本
$status         对于此次请求返回的状态
$body_bytes_sent  此次请求得到的字节数(不包含头部)
$upstream_response_time upstream  响应这次请求的时间
$http_referer          请求的页面是从哪个页面跳转过来的
$http_user_agent       客户端使用的浏览器类型
$http_x_forwarded_for  使用代理后,能够记录真实用户的IP地址
$uid_got   收到的客户端的cookie标识
$uid_set   发送给客户端的cookie标识
$http_x_tencent_ua 
$upstream_addr  真实处理这次请求的主机ip

关于nginx中logstash中grok规则

%{IP:ServerHost} %{IP:agencyip} - - \[(?<localTime>.*)\] \"(?<verb>\w{3,4}) (?<site>.*?(?=\s)) (?<httpprotcol>.*?)\" (?<statuscode>\d{3}) (?<bytes>\d+) (?<responsetime&
<think>我们使用Spring Boot集成ELKElasticsearch, Logstash, Kibana)日志系统的主要步骤包括: 1. 部署ELK服务(可以使用Docker或直接安装) 2. Spring Boot应用配置日志输出(使用Logback或Log4j2)并发送到Logstash 3. Logstash接收日志并转发到Elasticsearch 4. 在Kibana中查看日志 下面是一个简单的部署和代码示例: ### 一、ELK部署(使用Docker Compose) 创建`docker-compose.yml`文件: ```yaml version: '3.8' services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.17.3 environment: - discovery.type=single-node ports: - "9200:9200" volumes: - es-data:/usr/share/elasticsearch/data logstash: image: docker.elastic.co/logstash/logstash:7.17.3 ports: - "5000:5000" volumes: - ./logstash-config:/usr/share/logstash/pipeline depends_on: - elasticsearch kibana: image: docker.elastic.co/kibana/kibana:7.17.3 ports: - "5601:5601" depends_on: - elasticsearch volumes: es-data: ``` 创建Logstash配置文件`logstash-config/logstash.conf`: ```conf input { tcp { port => 5000 codec => json_lines } } output { elasticsearch { hosts => ["elasticsearch:9200"] index => "springboot-logs-%{+YYYY.MM.dd}" } } ``` 启动ELK:`docker-compose up -d` ### 二、Spring Boot应用配置 1. 添加依赖(Maven): ```xml <dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>7.0</version> </dependency> ``` 2. 创建`logback-spring.xml`配置文件(在resources目录下): ```xml <?xml version="1.0" encoding="UTF-8"?> <configuration> <include resource="org/springframework/boot/logging/logback/defaults.xml"/> <include resource="org/springframework/boot/logging/logback/console-appender.xml"/> <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <destination>localhost:5000</destination> <encoder class="net.logstash.logback.encoder.LogstashEncoder" /> </appender> <root level="INFO"> <appender-ref ref="LOGSTASH"/> <appender-ref ref="CONSOLE"/> </root> </configuration> ``` 3. 在Spring Boot主类或Controller中添加日志输出测试: ```java import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class TestController { private static final Logger logger = LoggerFactory.getLogger(TestController.class); @GetMapping("/test") public String test() { logger.info("This is a test log from Spring Boot"); return "Hello ELK!"; } } ``` ### 三、查看日志 1. 启动Spring Boot应用,访问`http://localhost:8080/test`生成日志。 2. 打开Kibana(`http://localhost:5601`),创建索引模式`springboot-logs-*`,然后在Discover中查看日志。 ### 四、优势说明 - **集中管理**:所有微服务日志统一收集和查询。 - **快速检索**:通过Elasticsearch的倒排索引实现高效搜索。 - **可视化分析**:Kibana提供日志趋势、错误统计等仪表盘。 §§相关问题§§ 1. 如何优化ELK集群的性能以处理大规模日志数据? 2. Spring Boot中除了Logstash还有哪些方式可以将日志发送到Elasticsearch? 3. Logstash配置文件中常用的过滤插件(Filter)有哪些?如何使用? 4. 在Kubernetes环境中如何部署ELK并收集容器日志? 5. 如何通过Kibana设置日志告警规则?</think>### Spring Boot 集成 ELK 日志系统指南 #### 一、ELK 核心组件及优势 - **Elasticsearch**:分布式搜索分析引擎(存储和索引日志) - **Logstash**:日志收集、过滤和转发管道 - **Kibana**:日志可视化与分析界面 - **优势**: - 集中管理所有微服务日志 - 实现毫秒级日志检索 - 支持复杂日志分析仪表盘 - 开源生态完善,社区活跃 #### 二、部署步骤(使用 Docker 快速部署) 1. **创建 `docker-compose.yml` 文件**: ```yaml version: '3' services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.17.3 environment: - discovery.type=single-node ports: - "9200:9200" volumes: - es-data:/usr/share/elasticsearch/data logstash: image: docker.elastic.co/logstash/logstash:7.17.3 ports: - "5000:5000" volumes: - ./logstash-config:/usr/share/logstash/pipeline depends_on: - elasticsearch kibana: image: docker.elastic.co/kibana/kibana:7.17.3 ports: - "5601:5601" depends_on: - elasticsearch volumes: es-data: ``` 2. **配置 Logstash 管道**(创建 `logstash-config/logstash.conf`): ```conf input { tcp { port => 5000 codec => json_lines } } filter { # 可选:添加自定义字段或处理 mutate { add_field => { "service" => "springboot-app" } } } output { elasticsearch { hosts => ["elasticsearch:9200"] index => "spring-logs-%{+YYYY.MM.dd}" } } ``` 3. **启动 ELK 服务栈**: ```bash docker-compose up -d ``` #### 三、Spring Boot 集成配置 1. **添加 Maven 依赖**: ```xml <dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>7.0</version> </dependency> ``` 2. **配置 Logback 日志输出**(`src/main/resources/logback-spring.xml`): ```xml <configuration> <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <destination>localhost:5000</destination> <!-- Logstash 地址 --> <encoder class="net.logstash.logback.encoder.LogstashEncoder"> <customFields>{"app":"springboot-demo"}</customFields> </encoder> </appender> <root level="INFO"> <appender-ref ref="LOGSTASH" /> <appender-ref ref="CONSOLE" /> </root> </configuration> ``` 3. **添加日志记录代码示例**: ```java @RestController public class DemoController { private static final Logger logger = LoggerFactory.getLogger(DemoController.class); @GetMapping("/test") public String testEndpoint() { logger.info("访问测试接口,请求参数: {}", "sample-data"); try { // 业务逻辑 return "Success"; } catch (Exception e) { logger.error("接口处理异常", e); // 异常日志自动上报ELK return "Error"; } } } ``` #### 四、Kibana 日志查看 1. 访问 `http://localhost:5601` 2. 配置索引模式: - Management > Stack Management > Index Patterns - 输入 `spring-logs-*` 创建索引 3. 查询日志: ```kql service: "springboot-app" AND level: "ERROR" ``` 4. 创建仪表盘: - 可视化错误日志趋势 - 分析高频异常类型 #### 五、生产环境建议 1. **性能优化**: - 使用 Filebeat 替代 Logstash TCP 输入减轻压力 - 设置 Elasticsearch 分片策略(`index.number_of_shards: 3`) 2. **安全加固**: - 启用 X-Pack 安全模块 - 配置 TLS 加密传输 3. **日志规范**: - 统一日志格式(添加 traceId 实现链路追踪) - 敏感信息脱敏处理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值