Recentemente, atualizei o projeto do shopping para oferecer suporte ao SpringBoot 2.7.0 e, ao mesmo tempo, atualizei todo o sistema de coleta de logs ELK. Acho que toda vez que eu atualizo a interface do Kibana, há algumas mudanças e ela se torna mais moderna! Hoje, vamos falar sobre o mecanismo de coleta de logs do projeto shopping, utilizando a última versão do ELK suportada pelo SpringBoot, espero que seja útil para todos!
Endereço comercial do projeto de comércio eletrônico SpringBoot (50k + estrelas): github.com/macrozheng/…
Construção do sistema de coleta de toras ELK
Primeiro, precisamos construir o sistema de coleta de logs ELK, que é instalado no ambiente Docker.
- Para instalar e executar o contêiner Elasticsearch, use os comandos a seguir;
docker run -p 9200:9200 -p 9300:9300 --name elasticsearch \
-e "discovery.type=single-node" \
-e "cluster.name=elasticsearch" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx1024m" \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-d elasticsearch:7.17.3
复制代码
- Ao iniciar, você descobrirá que o
/usr/share/elasticsearch/data
diretório não possui direitos de acesso, basta modificar/mydata/elasticsearch/data
as permissões do diretório e reiniciar;
chmod 777 /mydata/elasticsearch/data/
复制代码
- Para instalar e executar o contêiner Logstash, use o seguinte comando,
logstash.conf
endereço de arquivo: github.com/macrozheng/…
docker run --name logstash -p 4560:4560 -p 4561:4561 -p 4562:4562 -p 4563:4563 \
--link elasticsearch:es \
-v /mydata/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf \
-d logstash:7.17.3
复制代码
- Entre no container e instale o
json_lines
plugin;
docker exec -it logstash /bin/bash
logstash-plugin install logstash-codec-json_lines
复制代码
- Para instalar e executar o contêiner do Kibana, use os comandos a seguir;
docker run --name kibana -p 5601:5601 \
--link elasticsearch:es \
-e "elasticsearch.hosts=http://es:9200" \
-d kibana:7.17.3
复制代码
- Depois que o sistema de coleta de logs do ELK for iniciado, você poderá acessar a interface do Kibana. O endereço de acesso é: http://192.168.3.105:5601
Princípio de Coleta de Logs
O princípio do sistema de coleta de logs é o seguinte: primeiro, o aplicativo integra o plug-in Logstash e transmite os logs para o Logstash por meio de TCP. Após o Logstash receber o log, ele armazena o log em diferentes índices do Elasticsearch de acordo com o tipo de log. O Kibana lê o log do Elasticsearch, e então podemos realizar a análise visual do log no Kibana. O fluxograma específico é o seguinte.
Os logs são divididos nos quatro tipos a seguir para facilitar a visualização:
- 调试日志(mall-debug):所有的DEBUG级别以上日志;
- 错误日志(mall-error):所有的ERROR级别日志;
- 业务日志(mall-business):
com.macro.mall
包下的所有DEBUG级别以上日志; - 记录日志(mall-record):
com.macro.mall.tiny.component.WebLogAspect
类下所有DEBUG级别以上日志,该类是统计接口访问信息的AOP切面类。
启动应用
首先得把mall项目的三个应用启动起来,通过
--link logstash:logstash
连接到Logstash。
mall-admin
docker run -p 8080:8080 --name mall-admin \
--link mysql:db \
--link redis:redis \
--link logstash:logstash \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/admin/logs:/var/logs \
-d mall/mall-admin:1.0-SNAPSHOT
复制代码
mall-portal
docker run -p 8085:8085 --name mall-portal \
--link mysql:db \
--link redis:redis \
--link mongo:mongo \
--link rabbitmq:rabbit \
--link logstash:logstash \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/portal/logs:/var/logs \
-d mall/mall-portal:1.0-SNAPSHOT
复制代码
mall-search
docker run -p 8081:8081 --name mall-search \
--link elasticsearch:es \
--link mysql:db \
--link logstash:logstash \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/search/logs:/var/logs \
-d mall/mall-search:1.0-SNAPSHOT
复制代码
其他组件
其他组件如MySQL和Redis的部署不再赘述,想部署全套的小伙伴可以参考部署文档。
可视化日志分析
接下来我们体验下Kibana的可视化日志分析功能,以mall项目为例,确实很强大!
创建索引匹配模式
- 首先我们需要打开Kibana的
Stack管理
功能;
- 为Kibana创建
索引匹配模式
;
- 大家可以看到我们之前创建的四种日志分类已经在ES中创建了索引,后缀为产生索引的日期;
- 我们需要通过表达式来匹配对应的索引,先创建
mall-debug
的索引匹配模式;
- 然后再创建
mall-error
、mall-business
和mall-record
的索引匹配模式;
- 接下来打开分析中的
发现
功能,就可以看到应用中产生的日志信息了。
日志分析
- 我们先来聊聊
mall-debug
日志,这类日志是最全的日志,可用于测试环境调试使用,当我们有多个服务同时产生日志时,我们可以通过过滤器来过滤出对应服务的日志;
- 当然你也可以使用Kibana的专用查询语句KQL来过滤;
- A consulta difusa também pode ser implementada, como o log
message
contido分页
na consulta, e a velocidade da consulta é muito rápida;
- Por meio do
mall-error
log, você pode obter rapidamente as informações de erro do aplicativo e localizar o problema com precisão. Por exemplo, se o serviço Redis for interrompido, o log será gerado aqui;
- Através do
mall-business
log, você pode visualizarcom.macro.mall
todos os logs acima do nível DEBUG sob o pacote.Através deste log, podemos visualizar facilmente a saída da instrução SQL quando a interface é chamada;
- Através do
mall-record
log, você pode visualizar facilmente o status da solicitação da interface, incluindo o caminho da solicitação, parâmetros, resultados de retorno e informações demoradas, e qual interface é lenta para acessar rapidamente;
Resumir
Hoje, vou compartilhar com vocês a solução de coleta de logs no projeto do shopping e como realizar a análise de logs através do Kibana. É realmente muito mais conveniente ir diretamente ao servidor e usar a linha de comando para visualizar o log. Além disso, o Kibana também pode agregar logs gerados por diferentes serviços e suporta pesquisa de texto completo, o que é realmente muito poderoso.
Referências
Para saber como personalizar o mecanismo de coleta de logs no SpringBoot, você pode consultar o fato de que ainda vai ao servidor para coletar logs. Não é delicioso construir um sistema de coleta de logs!
Se você precisar proteger o log, pode consultar o log que alguém deseja me prostituir gratuitamente e ativar rapidamente a proteção de segurança!