ELK总结

概念

ELK是实时日志存储和检索分析的平台,可以对各种日志进行收集、过滤、清洗、存储、并用于实时检索和分析。

Elasticsearch,是基于Lucene开发的分布式搜索引擎。

Logstash,是数据收集和处理引擎,用于日志收集、过滤、加工等操作,然后一并发往elasticsearch。

Kibana,是可视化平台,它能够搜索、展示存储在 Elasticsearch 中索引数据。使用它可以很方便的用图表、表格、地图展示和分析数据。

 

架构

  • 如下架构适用于数据量小的应用环境,搭建简单,易于上手,但Logstash比较消耗系统资源,另外由于没有消息队列缓存,可能存在数据丢失的风险。

  • 如下架构适合大型集群、海量数据的业务场景,用filebeat替换前端的Logstash Agent,有效降低了收集日志对业务系统资源消耗,同时消息队列使用kafka集群架构,保障了数据的安全性和稳定性,而后端Logstash和Elasticsearch均采用集群模式搭建,实现了可扩展性,保证了系统的性能。

 

安装

 

  • jdk

下载安装包解压到/usr/local,然后配置环境变量vi /etc/profile

export JAVA_HOME=/usr/local/java

export CLASSPATH=$JAVA_HOME/lib

export PATH=$JAVA_HOME/bin:$PATH

确认是否安装成功,java -version

 

  • filebeat

安装包解压到/usr/local,然后修改配置./filebeat -e -c filebeat.yml

-c:配置文件位置
-path.logs:日志位置
-path.data:数据位置
-path.home:家位置
-e:关闭日志输出
-d 选择器:启用对指定选择器的调试。 对于选择器,可以指定逗号分隔的组件列表,也可以使用-d“*”为所有组件启用调试.例如,-d“publish”显示所有“publish”相关的消息。
启动:nohup ./filebeat -e -c filebeat.yml >/dev/null 2>&1 &

停止:ps -ef |grep filebeat, kill -9 pid

 

  • zookeeper

下载安装包解压到/usr/local,然后配置环境变量vi /etc/profile

export ZOOKEEPER_HOME=/usr/local/zookeeper-3.5.9

export PATH=$PATH:$ZOOKEEPER_HOME/bin

修改配置/conf/zoo.cfg 

dataDir=/data/zookeeper

dataLogDir=/var/log/zookeeper

audit.enable=true

启动 ./bin/zkServer.sh start

停止 ./bin/zkServer.sh stop

重启 ./bin/zkServer.sh restart

状态 ./bin/zkServer.sh status

 

  • kafka

下载安装包解压到/usr/local,然后配置环境变量vi /etc/profile

export KAFKA_HOME=/usr/local/kafka_2.11-2.4.0

export PATH=$PATH:$KAFKA_HOME/bin

修改配置config/server.properties

listeners=PLAINTEXT://192.168.1.100:9092

advertised.listeners=PLAINTEXT://192.168.1.100:9092

log.dirs=/var/log/kafka

zookeeper.connect=192.168.1.100:2181

启动/usr/local/kafka_2.11-2.4.0/bin/kafka-server-start.sh -daemon /usr/local/kafka_2.11-2.4.0/config/server.properties

 

  • elasticsearch

下载安装包解压到/usr/local

修改配置文件config/elasticsearch.yml

path.data: /usr/local/elasticsearch-7.12.0/data

path.logs: /usr/local/elasticsearch-7.12.0/logs

network.host: 192.168.1.100

cluster.initial_master_nodes: ["node-1"]

启动/usr/local/elasticsearch-7.12.0/bin/elasticsearch -d

 

  • logstash

下载安装包解压到/usr/local,然后配置环境变量vi /etc/profile

export LOGSTASH_HOME=/usr/local/logstash-5.6.1

export PATH=:$PATH:$LOGSTASH_HOME/bin

修改配置./bin/logstash.lib.sh

unset CDPATH

export JAVA_HOME=/usr/local/jdk1.8.0_291  //在这里添加上JAVA-1.8版本的路径。

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

启动/usr/local/logstash-5.6.1/bin/logstash -e 'input { stdin {} } output { stdout {} }'

./bin/logstash -f config/logstash.conf &

 

  • kibana

安装包解压到/usr/local,然后修改配置config/kibana.yml

server.port: 5601

server.host: "192.168.1.100"

elasticsearch.hosts: ["http://192.168.1.100:9200"]

启动服务./bin/kibana

访问http://192.168.1.100:5601/app/kibana

 

filebeat收集本地日志写入kafka

 

logstash消费kafka数据写入es

vi logstash.conf

vi logstash.yml

pipeline.ordered: auto

config.support_escapes: true

 

kibana搜索、可视化分析的用法

 

实例

logstash配置实例(日志写入redis队列):

input {
        file {
                path => "/home/pubsrv/mysql-5.5.53-3306/log/mysql-slow/mysql-slow.log"
                type => "query_slow"
                codec => "json"
                start_position => "beginning"
        }
}
output {
       if [type] == "query_slow" {
           redis {
                data_type => "list"
                host => "192.168.8.9"
                db => "1"
                port => "6379"
                password => "Hok51IdMQnW4hAnW"
                key => "query_slow"
           }
        }
        stdout { codec => rubydebug }
}

配置实例(redis队列到ES):

input {
    redis {
         host => "192.168.8.9"
         db => "1"
         password =>"Hok51IdMQnW4hAnW"
         data_type => "list"
         key => "mysql_query_slow"
         type => "mysql_slow_es"
         codec => "json"
    }
}

filter {
    json {
        source => "message"
    }
    grok {
        # 有ID有use
        match => [ "message", "(?m)^# User@Host: %{USER:user}\[[^\]]+\] @ (?:(?<clienthost>\S*) )?\[(?:%{IP:clientip})?\]\s+Id:\s%{NUMBER:id:int}\n# Query_time: %{NUMBER:query_time:float}\s+Lock_time: %{NUMBER:lock_time:float}\s+Rows_sent: %{NUMBER:rows_sent:int}\s+Rows_examined: %{NUMBER:rows_examined:int}\nuse\s(?<dbname>\w+);\nSET\s+timestamp=%{NUMBER:timestamp_mysql:int};\n(?<query>.*)" ]
        # 有ID无use
        match => [ "message", "(?m)^# User@Host: %{USER:user}\[[^\]]+\] @ (?:(?<clienthost>\S*) )?\[(?:%{IP:clientip})?\]\s+Id:\s%{NUMBER:id:int}\n# Query_time: %{NUMBER:query_time:float}\s+Lock_time: %{NUMBER:lock_time:float}\s+Rows_sent: %{NUMBER:rows_sent:int}\s+Rows_examined: %{NUMBER:rows_examined:int}\nSET\s+timestamp=%{NUMBER:timestamp_mysql:int};\n(?<query>.*)" ]
        # 无ID有use
        match => [ "message", "(?m)^# User@Host: %{USER:user}\[[^\]]+\] @ (?:(?<clienthost>\S*) )?\[(?:%{IP:clientip})?\]\n# Query_time: %{NUMBER:query_time:float}\s+Lock_time: %{NUMBER:lock_time:float}\s+Rows_sent: %{NUMBER:rows_sent:int}\s+Rows_examined: %{NUMBER:rows_examined:int}\nuse\s(?<dbname>\w+);\nSET\s+timestamp=%{NUMBER:timestamp_mysql:int};\n(?<query>.*)" ]
        # 无ID无use
        match => [ "message", "(?m)^# User@Host: %{USER:user}\[[^\]]+\] @ (?:(?<clienthost>\S*) )?\[(?:%{IP:clientip})?\]\n# Query_time: %{NUMBER:query_time:float}\s+Lock_time: %{NUMBER:lock_time:float}\s+Rows_sent: %{NUMBER:rows_sent:int}\s+Rows_examined: %{NUMBER:rows_examined:int}\nSET\s+timestamp=%{NUMBER:timestamp_mysql:int};\n(?<query>.*)" ]
    }

output {
    elasticsearch {
        hosts => ["192.168.8.9:9200"]
        index => "mysql-slowlog-%{+YYYY.MM.dd}"
    }
}

启动命令:logstash-6.5.1/bin/logstash -f /home/pubsrv/test/query_slow_es.conf

 

filebeat配置实例(日志写入redis队列):

filebeat.prospectors:

- input_type: log

 


  paths:
    - /home/pubsrv/mysql-5.5.53-3306/log/mysql-slow/mysql-slow.log

  exclude_lines: ['^\# Time']

  multiline.pattern: '^\# Time|^\# User'
  multiline.negate: true
  multiline.match: after

  tail_files: true

name: 192.168.8.9

output.redis:
   hosts: ["172.20.67.50:6379"]
   port: 6379
   password: "Hok51IdMQnW4hAnW"
   db:1nnnnn
   timeout: 10
   key: "mysql_query_slow"

启动命令:filebeat-5.5.0-linux-x86_64/filebeat -e -c test/query_slow_redis.yml

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值