Combate real: implantação do ambiente ELK e coleta de logs do projeto springboot

prefácio

Acredito que, como um movimentador de tijolos sênior, é inevitável verificar o log do sistema do aplicativo ao lidar com problemas e pode resolver problemas práticos com precisão e rapidez com base nesse log. Em circunstâncias normais, nossos logs de sistema são colocados no diretório em execução do pacote, o que é muito inconveniente de visualizar e classificar. Então. Hoje apresentamos a arquitetura de processamento de log do ELK para resolvê-lo.
insira a descrição da imagem aqui

Acumulação de tecnologia

Composição e função do ELK

ELK é a abreviação de logstash, elasticsearch e kibana. Assim como seu nome, a arquitetura elk é integrar esses três middlewares para construir um sistema de log.

Primeiro, usamos o sistema para integrar o cliente logstash e coletar logs e carregá-los no servidor logstash para filtragem e conversão. Os logs convertidos são gravados em elasticsearch. As poderosas funções de es fornecem armazenamento de dados, segmentação de palavras e índice invertido para melhorar a eficiência da consulta; finalmente, o kibana é diretamente uma plataforma de análise e visualização para renderizar dados de log.

Estrutura para construir a base

Para facilitar a construção da nossa arquitetura, utilizamos o docker-compose para disposição dos containers, desde que os três componentes do elk sejam salvos na mesma rede, eles podem se comunicar de acordo com o nome do serviço.

Claro, para as interfaces expostas externamente, só precisamos expor logstash para upload de dados e es para consulta de dados externos. Cada serviço de aplicativo deve ter sua própria configuração de logstash, fornecendo caminhos de entrada e saída e parâmetros de filtragem na configuração, e também precisamos expor portas externas para upload de dados.

Construção de ambiente EIK

elk目录下文件树:
./
├── docker-compose.yml
├── elasticsearch
│ ├── config
│ │ └── elasticsearch.yml
│ ├── data
│ └ ── logs
├── kabana
│ └── config
│ └── kabana.yml
└── logstash
├── config │ ├──
logstash.yml
│ └── small-tools
│ └── demo.config
└── dados

Relacionado à configuração do Elasticsearch

mkdie elk
#Add es directory
cd elk
mkdir -p ./elasticsearch/logs ./elasticsearch/data ./elasticsearch/config
chmod 777 ./elasticsearch/data
#./elasticsearch/config Adicionar arquivo de configuração es
cd elasticsearch/config
vim elasticsearch.yml

cluster.name: "docker-cluster"
network.host: 0.0.0.0
http.port: 9200
# 开启es跨域
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization
# 开启安全控制
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true

Relacionado à configuração do Kibana

cd elk
mkdir -p ./kibana/config
#./kibana/config Adicionar arquivo de configuração kibana
cd kibana/config
vim kibana.yml

server.name: kibana
server.host: "0.0.0.0"
server.publicBaseUrl: "http://kibana:5601"
elasticsearch.hosts: [ "http://elasticsearch:9200" ] 
xpack.monitoring.ui.container.elasticsearch.enabled: true
elasticsearch.username: "elastic"
elasticsearch.password: "123456"
i18n.locale: zh-CN

Logstash relacionado à configuração

cd elk
mkdir -p ./logstash/data ./logstash/config ./logstash/config/small-tools
chmod 777 ./logstash/data
#./logstash/config 下 展开logstash configfilecd
logstash/config
vim logstash.yml

http.host: "0.0.0.0"
xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.hosts: [ "http://elasticsearch:9200" ]
xpack.monitoring.elasticsearch.username: "elastic"
xpack.monitoring.elasticsearch.password: "123456"

#./logstash/config/small-tools Adicionar arquivo de configuração de monitoramento de projeto de demonstração
cd small-tools
vim demo.config

input { #输入

    tcp {
        mode => "server"
        host => "0.0.0.0"   # 允许任意主机发送日志
        type => "demo"      # 设定type以区分每个输入源
        port => 9999
        codec => json_lines # 数据格式
    }

}


filter {
    mutate {
        # 导入之过滤字段
        remove_field => ["LOG_MAX_HISTORY_DAY", "LOG_HOME", "APP_NAME"]
        remove_field => ["@version", "_score", "port", "level_value", "tags", "_type", "host"]
    }
}


output { #输出-控制台
    stdout{
        codec => rubydebug
    }
}


output { #输出-es

    if [type] == "demo" {
        elasticsearch {
            action => "index"                       # 输出时创建映射
            hosts  => "http://elasticsearch:9200"   # ES地址和端口
            user => "elastic"                       # ES用户名
            password => "123456"                    # ES密码
            index  => "demo-%{+YYYY.MM.dd}"         # 指定索引名-按天
            codec  => "json"
        }
    }

}

Adicionar arquivo docker-compose no diretório elk

docker-compose.yml

version: '3.3'
networks:
  elk:
    driver: bridge
services:
  elasticsearch:
    image: registry.cn-hangzhou.aliyuncs.com/zhengqing/elasticsearch:7.14.1
    container_name: elk_elasticsearch
    restart: unless-stopped
    volumes:
      - "./elasticsearch/data:/usr/share/elasticsearch/data"
      - "./elasticsearch/logs:/usr/share/elasticsearch/logs"
      - "./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml"
    environment:
      TZ: Asia/Shanghai
      LANG: en_US.UTF-8
      TAKE_FILE_OWNERSHIP: "true"  # 权限
      discovery.type: single-node
      ES_JAVA_OPTS: "-Xmx512m -Xms512m"
      ELASTIC_PASSWORD: "123456" # elastic账号密码
    ports:
      - "9200:9200"
      - "9300:9300"
    networks:
      - elk

  kibana:
    image: registry.cn-hangzhou.aliyuncs.com/zhengqing/kibana:7.14.1
    container_name: elk_kibana
    restart: unless-stopped
    volumes:
      - "./kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml"
    ports:
      - "5601:5601"
    depends_on:
      - elasticsearch
    links:
      - elasticsearch
    networks:
      - elk

  logstash:
    image: registry.cn-hangzhou.aliyuncs.com/zhengqing/logstash:7.14.1
    container_name: elk_logstash
    restart: unless-stopped
    environment:
      LS_JAVA_OPTS: "-Xmx512m -Xms512m"
    volumes:
      - "./logstash/data:/usr/share/logstash/data"
      - "./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml"
      - "./logstash/config/small-tools:/usr/share/logstash/config/small-tools"
    command: logstash -f /usr/share/logstash/config/small-tools
    ports:
      - "9600:9600"
      - "9999:9999"
    depends_on:
      - elasticsearch
    networks:
      - elk
      

Exibir a árvore de arquivos do diretório elk

yum -y install tree
#Exibe 4 camadas da
árvore sob o diretório atual -L 4
#Exibe todos os arquivos e pastas
tree -a
#Exibe a
árvore de tamanho -s

[root@devops-01 elk]# pwd
/home/test/demo/elk
[root@devops-01 elk]# tree ./
./
├── docker-compose.yml
├── elasticsearch
│ ├── config
│ │ └── elasticsearch.yml │
├── data
│ └── logs
├── kabana │ └── config │ └── kabana.yml └── logstash ├── config
├── logstash.yml │ └── small-tools │ └── demo.config └── data






10 diretórios, 5 arquivos

Arranjando alces

docker-compose up -d

A orquestração foi bem-sucedida Verifique se o contêiner foi iniciado com sucesso

[root@devops-01 elk]# docker ps | grep elk

edcf6c1cecb3 registry.cn-hangzhou.aliyuncs.com/zhengqing/kibana:7.14.1 “/bin/tini – /usr/l…” 6 minutes ago Up 10 seconds 0.0.0.0:5601->5601/tcp, :::5601->5601/tcp elk_kibana
7c24b65d2a27 registry.cn-hangzhou.aliyuncs.com/zhengqing/logstash:7.14.1 “/usr/local/bin/dock…” 6 minutes ago Up 13 seconds 5044/tcp, 9600/tcp elk_logstash
b4be2f1c0a28 registry.cn-hangzhou.aliyuncs.com/zhengqing/elasticsearch:7.14.1 “/bin/tini – /usr/l…” 6 minutes ago Up 6 minutes 0.0.0.0:9800->9200/tcp, :::9800->9200/tcp, 0.0.0.0:9900->9300/tcp, :::9900->9300/tcp elk_elasticsearch

A orquestração acessa com sucesso a página kibana
http://10.10.22.174:5601/app/home#/
insira a descrição da imagem aqui

Springboot integra logstash

pom.xml

<!--logstash start-->
<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>6.6</version>
</dependency>
<!--logstash end-->

logback-spring.xml

<springProfile  name="uat">
    <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>10.10.22.174:9999</destination>
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
    </appender>

    <root level="INFO">
        <appender-ref ref="logstash"/>
    </root>
</springProfile>

Inicie o logstash do projeto para coletar logs

Log de visualização da configuração do Kibana
http://10.10.22.174:5601/app/home#/ Digite o nome de usuário ES e a senha para entrar no console do Kibana
Clique no botão de gerenciamento para entrar na interface de gerenciamento
insira a descrição da imagem aqui

Clique no modo de índice para entrar -> criar modo de índice
insira a descrição da imagem aqui

Digite a expressão de log de configuração -> clique em Avançar
insira a descrição da imagem aqui

Selecione carimbo de data/hora --> criar modo de índice
insira a descrição da imagem aqui

Criado como mostrado abaixo representa o sucesso
insira a descrição da imagem aqui

Exibir
menu de registro, clique em -> descobrir
insira a descrição da imagem aqui
insira a descrição da imagem aqui

escreva no final

É relativamente simples implantar e coletar logs do projeto springboot no ambiente ELK. Precisamos apenas usar a tecnologia de contêiner docker para construir a estrutura elk e, em seguida, coletar e fazer upload de dados em nossos próprios projetos. É claro que logstash, elasticsearch e kibana, que são os componentes do elk, ainda precisam de algum conhecimento básico para facilitar as operações em combate real.

Acho que você gosta

Origin blog.csdn.net/weixin_39970883/article/details/131802116
Recomendado
Clasificación