Este experimento é baseado na análise de log ELK quando o ELFK foi configurado
Este experimento é baseado na análise de log ELK quando o ELFK foi configurado
Análise de arquitetura
A primeira camada, camada de coleta de dados A camada de coleta de dados está localizada no cluster de servidores de negócios mais à esquerda.O Filebeat é instalado em cada servidor de negócios para coleta de logs e, em seguida, os logs originais coletados são enviados para o cluster Kafka+zookeeper. A segunda camada, camada da fila de mensagens Após o log original ser enviado para o cluster Kafka+zookeeper, ele será armazenado centralmente.Neste momento, filbeat é o produtor da mensagem, e a mensagem armazenada pode ser consumida a qualquer momento. A terceira camada, camada de análise de dados Logstash, como consumidor, irá para o nó do cluster Kafka+zookeeper para extrair o log original em tempo real, depois analisar, limpar e filtrar o log original obtido de acordo com as regras e, finalmente, encaminhar o log limpo para o cluster Elasticsearch. A quarta camada, armazenamento persistente de dados.Após receber os dados enviados pelo logstash, o cluster Elasticsearch executa operações como gravação em disco e construção de uma biblioteca de índices e, finalmente, armazena os dados estruturados no cluster Elasticsearch. A quinta camada, consulta de dados e camada de exibição Kibana é uma plataforma de exibição de dados visuais.Quando há uma solicitação de recuperação de dados, ele lê os dados do cluster Elasticsearch e, em seguida, executa gráficos visuais e análises multidimensionais.
Construir ELK+Filebeat+Kafka+Zookeeper
zIP: Cluster: Porta: 192.168.83.11 Elasticsearch+Kibana+kafka+zookeeper+nginx proxy reverso 9100 9200 5601 9092 3288 8080 pode instalar filebeat 192.168.83.12 Elasticsearch+Logstash+kafka+zookeeper+filebeat+ngin x proxy reverso 9100 9200 9600 9092 3288 Random 8080 192.168.83.13 Elasticsearch+kafka+zookeeper+nginx reverse proxyz 9100 9200 9092 3288
root@elk2 ~]# netstat -antp |grep filebeat tcp 1 0 192.168.83.12:40348 192.168.83.11:9092 CLOSE_WAIT 6975/filebeat tcp 0 0 192.168.83.12:51220 192.168.83.12:90 92 ESTABELECIDO 6975/filebeat
1.3 máquinas instalam o zookeeper
wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.0/apache-zookeeper-3.8.0-bin.tar.gz --no-check-certificate
1.1 Descompacte e instale o pacote de software zookeeper
cd /opt upload apache-zookeeper-3.8.0-bin.tar.gz pacote tar zxf apache-zookeeper-3.8.0-bin.tar.gz descompactar mv apache-zookeeper-3.8.0-bin /usr/local/ zookeeper -3.8.0 #Corte o diretório descompactado para /usr/local/ cd /usr/local/zookeeper-3.8.0/conf/ cp zoo_sample.cfg zoo.cfg Faça backup e copie o arquivo de configuração do modelo como zoo.cfg
1.2 Modifique o arquivo de configuração do Zookeeper
cd /usr/local/zookeeper-3.8.0/conf #Digite o resumo do arquivo de configuração do zookeeper ls e você poderá ver o arquivo de configuração do modelo zoo_sample.cfg cp zoo_sample.cfg zoo.cfg Copie o arquivo de configuração do modelo para zoo.cfg mkdir - p /usr /local/zookeeper-3.8.0/data mkdir -p dataLogDir=/usr/local/zookeeper-3.8.0/1ogs vim zoo.cfg # O número de milissegundos de cada tick tickTime=2000 # O número de ticks que a # fase inicial de sincronização pode levar initLimit=10 # O número de tiques que pode passar entre # enviar uma solicitação e obter uma confirmação syncLimit=5 # o diretório onde o instantâneo está armazenado. # não use /tmp para armazenamento, / tmp aqui é apenas # exemplo amores. dataDir=/usr/local/zookeeper-3.8.0/data dataLogDir=/usr/local/zookeeper-3.8.0/1ogs # a porta na qual os clientes se conectarão clientPort=2181 # o número máximo de conexões de clientes. # aumente se precisar lidar com mais clientes #maxClientCnxns=60 # # Certifique-se de ler a seção de manutenção do # guia do administrador antes de ativar o autopurge. # # https://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance # # O número de instantâneos a serem retidos em dataDir #autopurge.snapRetainCount=3 # Intervalo da tarefa de limpeza em horas # Defina como "0" para desativar o recurso de limpeza automática #autopurge.purgeInterval=1 ## Provedores de Métricas # # https://prometheus.io Metrics Exporter #metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider #metricsProvider.httpHost=0.0.0.0 #metricsProvider.httpPort=7000 #metricsProvider.exportJvmInfo=true server.1=192.168.83.11:3188:3288 server.2=192.168.83.12:3188:3288 server.3=192.168.83.13:3188:3288
scp zoo.cfg elk2:/usr/local/zookeeper-3.8.0/conf/zoo.cfg scp zoo.cfg elk3:/usr/local/zookeeper-3.8.0/conf/zoo.cfg
1.3 Defina o número myid e inicie o script. Não configure a sincronização aqui. A seguinte operação é para configurar uma máquina e uma máquina.
echo 1 >/usr/local/zookeeper-3.8.0/data/myid # configure echo 2 no node1 >/usr/local/zookeeper-3.8.0/data/myid # configure echo 3 no node2 >/usr/local/ configurado em zookeeper-3.8.0/data/myid #node3
1.4 Duas maneiras de iniciar o zookeeper
cd /usr/local/zookeeper-3.8.0/bin ls ./zkServer.sh start #Inicie três servidores por vez antes de poder ver o status./zkServer.sh status #Verifique o status
[root@elk1 bin]# ./zkServer.sh status /usr/bin/java ZooKeeper JMX ativado por padrão Usando a configuração: /usr/local/zookeeper-3.8.0/bin/../conf/zoo.cfg Porta do cliente encontrado: 2181. Endereço do cliente: localhost. SSL do cliente: falso. Modo: seguidor [root@elk2 bin]# ./zkServer.sh status /usr/bin/java ZooKeeper JMX ativado por padrão Usando a configuração: /usr/local/zookeeper-3.8.0/bin/../conf/zoo. cfg Porta do cliente encontrada: 2181. Endereço do cliente: localhost. SSL do cliente: falso. Modo: líder [root@elk3 bin]# ./zkServer.sh status /usr/bin/java ZooKeeper JMX habilitado por padrão Usando a configuração: /usr/local/zookeeper-3.8.0/bin/../conf/zoo. cfg Porta do cliente encontrada: 2181. Endereço do cliente: localhost. SSL do cliente: falso. Modo: seguidor
1.5 Recomendação de inicialização do script
O segundo tipo de script que precisa ser executado para iniciar 3 nós #//Configure o script de inicialização, o script cria o vim no diretório onde a inicialização é iniciada /etc/init.d/zookeeper #!/bin/bash #chkconfig :2345 20 90 #description :Zookeeper Service Control Script ZK_HOME='/usr/local/zookeeper-3.8.0' case $1 in start) echo "----------zookeeper start------ ----" $ ZK_HOME/bin/zkServer.sh start ;; stop) echo "---------- zookeeper parou -----------" $ZK_HOME/bin/zkServer .sh stop ;; restart ) echo "---------- zookeeper restart ---------" $ZK_HOME/bin/zkServer.sh restart ;; status) echo "---- --- --- status de zelador -------------" $ZK_HOME/bin/zkServer.sh status ;; *) echo "Uso: $0 {start|stop|restart|status}" esac cd /usr/local/zookeeper-3.8.0/bin no nó 1 operação de serviço chmod +x /etc/init.d/zookeeper chkconfig --add zookeeper #Adicionar ao serviço de gerenciamento do sistema zookeeper start start service zookeeper status Depois de verificar o status, o seguidor está operando no nó 2 service chmod +x /etc/init.d/zookeeper chkconfig --add zookeeper #Adicionar ao serviço de gerenciamento do sistema zookeeper start start service service Status do Zookeeper Depois de visualizar o status, é o líder que inicia o segundo, é o líder que opera o serviço no nó 3. chmod +x /etc/init.d/zookeeper chkconfig --add zookeeper #Add para o início do zookeeper do serviço de gerenciamento do sistema Iniciar o status do zookeeper do serviço de serviço Seguidor após visualizar o status
2. Instale o kafka (3 máquinas devem ser operadas)
#downloadkafka cd /opt wget http://archive.apache.org/dist/kafka/2.7.1/kafka_2.13-2.7.1.tgz uploadkafka_2.13-2.7.1.tgz para/opt tar zxf kafka_2 .13 -2.7.1.tgz mv kafka_2.13-2.7.1 /usr/local/kafka
2.2 Modifique o arquivo de configuração
cd /usr/local/kafka/config/ cp server.properties server.properties.bak vim server.properties 192.168.83.11配置 broker.id=1 listeners=PLAINTEXT://192.168.83.11:9092 zookeeper.connect=192.168.83.11 :2181,192.168.83.12:2181,192.168.83.13:2181 192.168.83.13配置 broker.id=2 listeners=PLAINTEXT://192.168.83.12:9092 zookeeper.connect=192.168.83.11:2181,192 .168.83.12:2181, 192.168.83.13:21810:2181 192.168.83.13配置 broker.id=3 listeners=PLAINTEXT://192.168.83.13:9092 zookeeper.connect=192.168.83.11:2181,192.168.83.12:2181,19 2.168.83.13:2181
2.3 Adicionar comandos relevantes ao ambiente do sistema
vim /etc/profile 末行加入 export KAFKA_HOME=/usr/local/kafka export PATH=$PATH:$KAFKA_HOME/bin source /etc/profile [root@elk1 config]# scp /etc/profile elk2:/etc/profile perfil 100% 1888 1,4 MB/s 00:00 [root@elk1 config]# scp /etc/profile elk3:/etc/profile perfil
2.3 Adicionar comandos relevantes ao ambiente do sistema
cd /usr/local/kafka/config/ kafka-server-start.sh -daemon server.properties netstat -antp | grep 9092
2.4 Operação de linha de comando do Kafka
Criar tópico kafka-topics.sh --create --zookeeper 192.168.121.10:2181,192.168.121.12:2181,192.168.121.14:2181 --replication-factor 2 --partitions 3 --topic test --zookeeper: definir zookeeper cluster Endereço do servidor, se houver vários endereços IP separados por vírgulas, geralmente use um IP –fator de replicação : defina o número de cópias da partição, 1 representa uma única cópia, 2 é recomendado –partitions: defina o número de partições –tópico: definir a exibição do nome do tópico Todos os tópicos no servidor atual kafka-topics.sh --list --zookeeper 192.168.121.10:2181,192.168.121.12:2181,192.168.121.14:2181 Verificar os detalhes de um tópico kafka-topics.sh --describe -- zookeeper 192.168.121.10:2181,192.168.121.12:2181,192.168.121.14:2181 mensagem de liberação kafka-console-producer.sh --broker-list 192.168.121.10:9092,192.168.121.12 :9 092.192.168 .121.14:9092 - -teste de tópico -mensagem de consumo de teste de tópico kafka-console-consumer.sh --bootstrap-server 192.168.121.10:9092,192.168.121.12:9092,192.168.121.14:9092 --topic test --from-beginning --from-beginning: Colocará todos os tópicos anteriores no tópico Leia todos os dados e modifique o número de partições kafka-topics.sh --zookeeper 192.168.80.10:2181,192.168.80.11:2181,192.168.80.12:2181 --alter --topic test --partitions 6Excluir tópico kafka-topics. sh --delete --zookeeper 192.168.80.10:2181,192.168.80.11:2181,192.168.80.12:2181 --teste de tópico
3. Configure o filebeat da camada de aquisição de dados
3.1 Formato de registro personalizado
3.1 定制日志格式 [root@elk2 ~]# vim /etc/nginx/nginx.conf user nginx; worker_processes automático; error_log /var/log/nginx/error.log aviso; pid /var/run/nginx.pid; eventos { worker_connections 1024; } http { include /etc/nginx/mime.types; aplicativo default_type/octet-stream; # log_format main2 '$http_host $remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$upstream_addr" $request_time'; # access_log /var/log/nginx/access.log main2; log_format json '{"@timestamp": #gzip ativado; pesquisa elástica upstream '"url":"$uri",' '"status":"$status",' ' "domain":"$host",' '"host":"$server_addr",' '"size":$ body_bytes_sent,' '"responsetime":$request_time,' '"referer": "$http_referer",' '"ua": "$http_user_agent"' '}'; access_log /var/log/nginx/access. registro json; enviar arquivo em; #tcp_nopush ativado; keepalive_timeout 65; { zona elasticsearch 64K; servidor 192.168.83.11:9200; servidor 192.168.83.12:9200; servidor 192.168.83.13:9200; } servidor { escuta 8080; host local nome_do_servidor; localização / { proxy_pass http://elasticsearch; html raiz; index index.html index.htm; } } include /etc/nginx/conf.d/*.conf; }
3.2 instalar filebeat
[root@elk2 ~]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.0.0-x86_64.rpm [root@elk2 ~]# rpm -ivh filebeat-6.0.0-x86_64 .rpm
3.3 Modifique o arquivo de configuração filebeat.yml
[root@elk2 ~]# vim /etc/filebeat/filebeat.yml habilitado: true paths: - /var/log/nginx/*.log #----------------- --------- Saída do Elasticsearch ------------------------------ output.kafka: # Matriz de hosts para conectar a. hosts: ["192.168.83.11:9092","192.168.83.12:9092","192.168.83.13:9092"] #145 tópico: "nginx-es"
3.4 iniciar batida de arquivo
[root@elk2 ~]# systemctl reinicie filebeat
4. Após a implantação de todos os componentes, inicie a implantação da configuração
4.1 Criar um tópico nginx-es no kafka
kafka-topics.sh --create --zookeeper 192.168.83.11:2181,192.168.83.12:2181,192.168.83.13:2181 --replication-factor 1 --partitions 1 --topic nginx-es
4.2 Modifique o arquivo de configuração do logstash
[root@elk2 ~]# vim /etc/logstash/conf.d/nginxlog.conf input{ kafka{ topics=>"nginx-es" codec=>"json" decorar_events=>true bootstrap_servers=>"192.168.83.11: 9092,192.168.83.12:9092,192.168.83.13:9092" } } output { elasticsearch { hosts=>["192.168.83.11:9200","192.168.83.12:9200","192.168.83.13:9200"] index= >'nginx-log-%{+AAAA-MM-dd}' } } 重启logstash systemctl restart logstash