ELK-Logstash 配置

概述

Logstash 分为 ShipperIndexer 两种角色,分别完成不同的工作:

  • Shipper:安装在 client 上,只负责采集和传输日志;
  • Indexer:安装在 server 上,从队列(例如 redis)读取日志、过滤、格式化等,然后存入 Elasticsearch

常用配置

Logstash 的工作,涉及 inputoutput 两种插件。

input 插件

input 插件,是用来提取日志文件,一般使用 file 插件,该插件常用的几个参数是:

  • path:日志文件路径;
  • type:名称,可以在后面的 filteroutput 中对不同的 type 做不同的处理;
  • start_position:指定起始读取位置,“beginning” 表示从文件头开始,“end” 表示从文件尾开始;
  • sincedb_pathLogstash 会记录每个文件已经被读取到的位置,保存在 sincedb 中,如果 Logstash 重启,那么对于同一个文件,会继续从上次记录的位置开始读取。如果想重新从头读取文件,需要删除 sincedb 文件,sincedb_path 则是指定了该文件的路径。为了方便,我们可以根据需要将其设置为 “/dev/null”,即不保存位置信息。

output 插件

output 插件,是用来输出日志的,可以将数据输出到消息队列(例如 redis)、标准输出(stdout)或者 Elasticsearch

Shipper 示例

建议不要做任何的处理,直接传输日志,以免占用过多的服务器资源。

input{
    file{
        type => "redis"
        path => "/var/redis/redis.log"
        start_position => "beginning"
        #sincedb_path => "/dev/null"
    }
}

output{
    if [type] == "redis"{
        redis{
            host => "127.0.0.1"
            data_type => "list"
            key => "redis"
            db => 1
            password => "123456"
        }
    }
}

sincedb_path 记录了上次读取日志的位置,这也算是个BUG吧,因为服务重启时,日志重新加载,而 logstash 需要从 sincedb_path 处读取,自然是获取不到日志内容的,如果要获取日志内容,需要删掉 sincedb_pathsincedb_path 路径可以在 logstash.yml 中查看和配置,或者为了服务重启时能重新读取日志,可以不记录 sincedb_path 值,如 sincedb_path => "/dev/null" ,那么服务重启时,就从头开始读取日志。

Indexer 示例

input{
    redis{
        type => "redis"
        host => "127.0.0.1"
        data_type => "list"
        key => "redis"
        db => 1
        password => "123456"
    }
}

output{
    if [type] == "redis"{
        elasticsearch{
            hosts => "10.16.4.56"
            index => "redis-%{+YYYY-MM-dd}"
        }
    }
}

可以写多个文件,也可以写在一起。
此处从 redis 队列中读取的日志记录,并未做任何的过滤和格式化,在生产环境中还是需要过滤和格式化的,并根据不同的日志类型,写入不同的 index 中。

你可能感兴趣的:(ELK-Logstash 配置)