vlambda博客
学习文章列表

ELK 日志系统原理及其搭建

ELK分别是Elasticsearch、Logstash、Kibana三个开源框架缩写。

参考文档:

https://www.cnblogs.com/yycc/p/7422628.html

https://blog.csdn.net/qq_22211217/article/details/80764568

https://www.cnblogs.com/zhaijunming5/p/6639553.html



架构:

filebeat --> redis -->logstash --> es --> kibana

关键词:多服务器、转发、汇总、展示、轻量级

  • 每个客户端需要安装filebeat收集PHP日志

  • filebeat把收集到的日志传到redis

  • logstash从redis读取日志,读取一条日志就从redis里删除一条日志

  • logstash把日志发送到es

  • 最后kibana可视化查询日志

官网:https://www.elastic.co/cn/blog/kibana-4-video-tutorials-part-1

四个包都可以解压即用,不用安装


Elasticsearch:

/config/elasticsearch.yml

# ---------------------------------- Network -----------------------------------

#

# Set the bind address to a specific IP (IPv4 or IPv6):

#

network.host: 0.0.0.0           ##服务器ip 本机

#

# Set a custom port for HTTP:

#

http.port: 9200                 ##服务端口

#

# For more information, consult the network module documentation.

启动elasticsearch

/Applications/XAMPP/xamppfiles/htdocs/ELK/elasticsearch/bin/elasticsearch     #命令窗运行

/Applications/XAMPP/xamppfiles/htdocs/ELK/elasticsearch/bin/elasticsearch  -d    #后台线程运行

关闭elasticsearch

ctrl+c #命令窗关闭

ps -ef | grep elastic #后台线程关闭

kill -9 4442 ##pid 4442为查处线程的pid

          

启动测试连接:

http://127.0.0.1:9200/

kibana:

/config/kibana.yml

server.port: 5601       ##服务端口

server.host: "0.0.0.0"  ##服务器ip  本机

启动:

/Applications/XAMPP/xamppfiles/htdocs/ELK/kibana/bin/kibana #命令窗启动

nohup /Applications/XAMPP/xamppfiles/htdocs/ELK/kibana/bin/kibana & #后台线程启动

关闭kibana

ctrl+c #命令窗关闭

ps -ef | grep kibana #后台线程关闭

kill -9 4525 ##pid 4525 为查处线程的pid

常见错误:

1、运行一段时间es达到了瓶颈

retrying failed action with response code: 403 ({"type"=>"cluster_block_exception", "reason"=>"index [logstash-2019.07.30] blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];”})

解决办法1


在kibana开发控制台执行下面语句即可

解决方法2

如果kibana无法执行命令,可以使用下面命令解决


Logstash:

/config/server.conf 

# 配置logstash输入源

input {

    # 输出到redis

    redis {

        port => 6379              # redis端口号

        data_type => "list"    # 使用发布/订阅模式

        key => "logstash_list_0"  # 发布通道名称

    }

}

filter{

    ##匹配consul healthcheck get request

    if([message]=~ "healthcheck.php"){

        ### 丢弃

        drop{}

    }

}

# 配置输出的地方

output {

  # 控制台

  stdout { codec => rubydebug }

  # es

  elasticsearch {

        hosts => [ "localhost:9200" ]

    }

}

启动:

/Applications/XAMPP/xamppfiles/htdocs/ELK/logstash/bin/logstash -f  /Applications/XAMPP/xamppfiles/htdocs/ELK/logstash/config/server.conf ##命令窗形式

Nohup  /Applications/XAMPP/xamppfiles/htdocs/ELK/logstash/bin/logstash -f

/Applications/XAMPP/xamppfiles/htdocs/ELK/logstash/config/server.conf &   ##后台线程形式

关闭:

ctrl+c #命令窗关闭

ps -ef | grep logstash #后台线程关闭

kill -9 4617 ##pid 4617 为查处线程的pid

Logstash持久化到磁盘

当发生异常情况,比如logstash重启,有可能发生数据丢失,可以选择logstash持久化到磁盘,修改之前重启logstash数据丢失,修改之后重启logstash数据不丢失。以下是具体操作:

在config/logstash.yml中进行配置以下内容

queue.type: persisted

path.queue: /usr/share/logstash/data #队列存储路径;如果队列类型为persisted,则生效

queue.page_capacity: 250mb #队列为持久化,单个队列大小

queue.max_events: 0 #当启用持久化队列时,队列中未读事件的最大数量,0为不限制

queue.max_bytes: 1024mb #队列最大容量

queue.checkpoint.acks: 1024 #在启用持久队列时强制执行检查点的最大数量,0为不限制

queue.checkpoint.writes: 1024 #在启用持久队列时强制执行检查点之前的最大数量的写入事件,0为不限制

queue.checkpoint.interval: 1000 #当启用持久队列时,在头页面上强制一个检查点的时间间隔

修改完后,重启logstash

filebeat:

/filebeat.yml

  

output.redis:

   hosts: "127.0.0.1:6379"    #输出到redis的机器

   timeout: 5    #连接超时时间

   key: "logstash_list_0"    #以default_list的keys传输到redis

filebeat.inputs:

# Each - is an input. Most options can be set at the input level, so

# you can use different inputs for various configurations.

# Below are the input specific configurations.

- type: log

  # Change to true to enable this input configuration.

  enabled: true

  # Paths that should be crawled and fetched. Glob based paths.

  paths:

    - /Applications/XAMPP/xamppfiles/htdocs/ELK/filebeat/logs/input         #检测log文件路径

    #- c:\programdata\elasticsearch\logs\*

启动:

/Applications/XAMPP/xamppfiles/htdocs/ELK/filebeat/filebeat  -c /Applications/XAMPP/xamppfiles/htdocs/ELK/filebeat/filebeat.yml

其他配置 /filebeat/modules.d/**

配置路径path

修改文件名,去掉disable