aneasystone's blog - 2022年7月
type: channel
link: https://www.aneasystone.com/2022/07
description: The quieter you become, the more you are able to hear.
items: 实战 ELK 搭建日志系统
items: Spring Boot 生产就绪特性 Actuator

实战 ELK 搭建日志系统
type: item
date: 2022-07-23T23:28:00+00:00
description: ELK 是 Elasticsearch + Logstash + Kibana 的简称。Elasticsearch 是一个基于 Lucene 的分布式全文搜索引擎，提供 RESTful API 进行数据读写；Logstash 是一个收集，处理和转发事件和日志消息的工具；而 Kibana 是 Elasticsearch 的开源数据可视化插件，为查看存储在 Elasticsearch 提供了友好的 Web 界面，并提供了条形图，线条和散点图，饼图和地图等分析工具。总的来说，Elasticsearch 负责存储数据，Logstash 负责收集日志，并将日志格式化后写入 Elasticsearch，Kibana 提供可视化访问 Elasticsearch 数据的功能。安装 Elasticsearch使用下面的 Docker 命令启动一个单机版 Elasticsearch 实例：> docker run --name es \ -p 9200:9200 -p 9300:9300 \ -e ELASTIC_PASSWORD=123456 \ -d docker.elastic.co/elasticsearch/elasticsearch:8.3.2从 Elasticsearch 8.0 开始，默认会开启安全特性，我们通过 ELASTIC_PASSWORD 环境变量设置访问密码，如果不设置，Elasticsearch 会在第一次启动时随机生成密码，查看启动日志可以发现类似下面这样的信息：------------------------------------------------------------------------------------------------------------------------------------- -> Elasticsearch security features have been automatically configured! -> Authentication is enabled and cluster connections are encrypted. -> Password for the elastic user (reset with `bin/elasticsearch-reset-password -u elastic`): dV0dN=eiH7CDtoe1IVS0 -> HTTP CA certificate SHA-256 fingerprint: 4032719061cbafe64d5df5ef29157572a98aff6dae5cab99afb84220799556ff -> Configure Kibana to use this cluster: * Run Kibana and click the configuration link in the terminal when Kibana starts. * Copy the following enrollment token and paste it into Kibana in your browser (valid for the next 30 minutes): [binary] -> Configure other nodes to join this cluster: * Copy the following enrollment token and start new Elasticsearch nodes with `bin/elasticsearch --enrollment-token <token>` (valid for the next 30 minutes): [binary] If you're running in Docker, copy the enrollment token and run: `docker run -e "ENROLLMENT_TOKEN=<token>" docker.elastic.co/elasticsearch/elasticsearch:8.3.2` -------------------------------------------------------------------------------------------------------------------------------------另外 Elasticsearch 使用了 HTTPS 通信，不过这个证书是不可信的，在浏览器里访问会有不安全的警告，使用 curl 访问时注意使用 -k 或 --insecure 忽略证书校验：$ curl -X G…

Spring Boot 生产就绪特性 Actuator
type: item
date: 2022-07-07T02:31:00+00:00
description: Spring Boot 官网将 Actuator 称为 生产就绪特性（Production-ready features），它提供了诸如健康检查、审计、指标收集、HTTP 跟踪等功能，帮助我们监控和管理 Spring Boot 应用。快速开始使用 Spring Initializr 创建一个项目，依赖项选择 Web 和 Actuator，或者在已有项目中添加依赖：<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>启动程序后，就能访问 /actuator 接口了：$ curl -s http://localhost:8080/actuator | jq { "_links": { "self": { "href": "http://localhost:8080/actuator", "templated": false }, "health": { "href": "http://localhost:8080/actuator/health", "templated": false }, "health-path": { "href": "http://localhost:8080/actuator/health/{*path}", "templated": true } } }Spring Boot Actuator 提供了很多有用的接口，被称为端点（Endpoints），访问 /actuator 就可以看出程序当前暴露了哪些端点。端点的访问路径可以通过下面的配置修改：management.endpoints.web.base-path=/management从上面的命令结果可以看出在最新版本中，Actuator 只暴露一个 /health 端点，这个端点提供了关于应用健康情况的一些基础信息。如果要开启所有端点，可以打开配置文件 application.properties，添加如下配置项：management.endpoints.web.exposure.include=*现在看看暴露了哪些端点：$ curl -s http://localhost:8080/actuator | jq { "_links": { "self": { "href": "http://localhost:8080/actuator", "templated": false }, "beans": { "href": "http://localhost:8080/actuator/beans", "templated": false }, "caches-cache": { "href": "http://localhost:8080/actuator/caches/{cache}", "templated": true }, "caches": { "href": "http://localhost:8080/actuator/caches", "templated": false }, "health": { "href": "http://localhost:8080/actuator/health", "templated": false }, "health-path": { "href": "http://localhost:8080/actuator/health/{*path}", "templated": true }, "info": { "href": "http://localhost:8080/actuator/info", "templated": false }, "conditions": { "href": "http://localhost:8080/actuator/conditions", "templated": false }, "configprops": { "href": "http://localhost:8080/actuator/configprops", "templated": false }, "configprops-prefix": { "href": "http://localhost:8080/actuator/configprops/{prefi…