elastic stack学习--logstash配置

  1. 云栖社区>
  2. 博客>
  3. 正文

elastic stack学习--logstash配置

积淀 2018-03-15 20:26:23 浏览2195
展开阅读全文

logstash组件

    logstash中一条pipeline由输入、过滤、输出3个部分组成,数据经由inputs -> filters -> outputs进行流转,每个pipeline中可以包含一个或者多个inputs、filters、outputs,用户可根据需求在配置文件中定义。logstash对于3个部分提供了丰富的内置组件用于支撑数据的转换和处理。

inputs组件

    input组件负责接收数据源的数据,生成event事件;一些常见的组件如下:

  • stdin:读取操作系统标准输入流中的数据;
  • file:读取文件系统的文件,类似于UNIX的命令tail -0F;
  • syslog:监听操作系统514端口,接收系统日志,并根据RFC3164格式进行解析;
  • redis:从redis中读取数据;redis经常用作logstash的消息队列,用于暂存event事件;
  • beats:接收并处理Filebeat等beat组件发来的事件;

更多组件请参看官方文档Input Plugins

filters组件

    filter组件用于对流经管道的数据进行过滤、转换等操作,使得数据符合输出需求。常见组件如下:

  • grok:用于解析和构建任意文本数据。grok是logstash用于解析非结构化日志数据的最好方式,包含120中pattern,能够满足大部分需求;
  • mutate:执行event中通用的字段处理,包括:对字段的重命名、删除、替换、修改等操作;
  • drop:删除event;
  • clone:拷贝event,可以增减字段;
  • geoip:根据event中的IP地址字段解析地理位置信息字段,添加到event中;

更多组件请参看官方文档Filter Plugins

outputs组件

output组件用于将管道中的数据输出到下一环节;常见组件包括:

  • stdout:操作系统标准输出流;
  • elasticsearch:将所有event发送到elasticsearch;
  • file:将event写入文件;
  • graphite:发送event给graphite,graphite是一个开源的用于数据存储和绘图的组件;
  • statsd:发送event给statsd;

更多组件请参看官方文档Output Plugins

codecs组件

    codecs组件主要用作inputs和outputs中数据的编解码使用,能够使数据的序列化操作对于数据传输透明,常见的组件包括:

  • json:json格式编解码器;
  • msgpack:msgpack格式编解码器;
  • plain:文本格式编解码器;
  • multiline:将多行文本event合并成一个event,比如将java中的异常跟踪日志合并成一条消息;

更多组件请参看官方文档Codec Plugins

logstash执行模型

image

    每个input组件都运行在其自己的线程中,将解析的event写入到一个中心队列中,队列的数据默认存放到内存中,也可以配置存放到硬盘中;一个pipeline包含多个工作线程,每个工作线程会从中心队列中获取一批event,按filter的配置顺序执行每个filter环节,然后再执行每个output。工作线程获取一批数据的数量以及工作线程数可配置。

logstash目录结构

  • home:logstash安装包解压后根目录;
  • bin:二进制文件、脚本存放目录;默认:{extract.path}/bin
  • config:配置文件目录,包括:logstash.yml、jvm.options文件;默认:{extract.path}/config,通过path.settings修改;
  • logs:日志文件目录,默认:{extract.path}/logs,通过path.logs修改;
  • plugins:存放插件,每个插件一个子目录;默认:{extract.path}/plugins,通过path.plugins修改;
  • data:存放数据文件;默认:{extract.path}/data,通过path.data修改;

logstash配置文件

logstash包含2种配置文件:

  • 基本配置文件:用于配置logstash启动及运行参数;包括:logstash.yml、jvm.options、startup.options(linux使用)。
  • pipeline配置文件:用于配置pipeline数据处理流程;

logstash.yml常用配置项

logstash.yml存放logstash的基本配置参数,包括数据文件路径、日志级别等。logstash.yml中的配置项也可以通过启动logstash时,通过指定命令行参数进行覆盖。 logstash.yml配置项支持环境变量作为参数值;

  • node.name:用于标识一个logstash实例;默认:所在机器的hostname;
  • path.data:存放logstash以及组件的持久化数据;默认:LOGSTASH_HOME/data;
  • pipeline.id:pipeline的标识,类似于kafka中的topic,用于区分不同的pipeline;当多个logstash使用相同的pipeline.id时,相当于将数据汇总到同一个pipeline中,此时多个logstash可以视作一个通过pipeline.id关联的集群;默认:main;
  • pipeline.workers:pipeline的工作线程数,用于执行filter和output阶段使用;默认:所在机器CPU核数;
  • pipeline.batch.size:工作线程一次获取的event数量;设置较大的batchSize能够提升处理性能,但是可能消耗较大的内存;可以调整$LS_HEAP_SIZE环境变量来设置堆内存大小;默认:125;
  • pipeline.batch.delay:;默认:50ms;
  • pipeline.unsafe_shutdown:logstash在关闭时,默认会等到所有被处理的event都通过output输出后再执行关闭操作;如果设置为true,则允许强制关闭,而不必等待event处理完毕,此时可能会丢失数据;默认:false;
  • path.config:logstash的main pipeline配置文件路径,如果指定通配符,则按照字母顺序读取配置文件;
  • config.string:pipeline的配置字符串,语法同pipeline配置文件内容的语法;默认:不配置;
  • config.test_and_exit:设置为true,则用来检测pipeline配置文件格式是否正确,检测完成后输出结果并退出;默认:false;
  • config.reload.automatic:设置为true,则定期检测pipeline配置文件是否更新,如果有更新则触发SIGHUP信号,重新加载配置文件;默认:false;
  • config.reload.interval:设置pipeline配置文件检测周期,配合config.reload.automatic使用,默认:3s;
  • config.debug:设置为true,则将pipeline配置文件信息打印成debug日志,需同时保证log.level: debug才可生效;包括密码等信息均会被打印到日志中;默认:false;
  • config.support_escapes:设置为true,将n等字符串转义成不可见字符;默认:false;
  • modules:配置模块,格式类似如下,默认:未配置;
modules:
  - name: MODULE_NAME1
    var.PLUGIN_TYPE1.PLUGIN_NAME1.KEY1: VALUE
    var.PLUGIN_TYPE1.PLUGIN_NAME1.KEY2: VALUE
    var.PLUGIN_TYPE2.PLUGIN_NAME2.KEY1: VALUE
    var.PLUGIN_TYPE3.PLUGIN_NAME3.KEY1: VALUE
  - name: MODULE_NAME2
    var.PLUGIN_TYPE1.PLUGIN_NAME1.KEY1: VALUE
    var.PLUGIN_TYPE1.PLUGIN_NAME1.KEY2: VALUE
  • queue.type:缓存event的队列类型,如果设置为memory,则在内存中缓存event,如果设置为persisted,则在硬盘上缓存event;默认:memory;
  • path.queue:当queue.type: persisted时,队列要存放的文件路径,默认:path.data/queue;
  • queue.page_capacity:当queue.type: persisted时,每个文件存放的数据大小,文件中的数据只会追加,默认:64mb;
  • queue.max_events:当queue.type: persisted时,queue中允许存放的最大未读取event数量;默认:0,即不限制;
  • queue.max_bytes:当queue.type: persisted时,指定queue中存放数据的最大大小;默认:1024mb;
  • queue.checkpoint.acks:当queue.type: persisted时,设置最大接收多少个应答event后更新检查点,如果设置为0,则表示不限制;默认:1024;
  • queue.checkpoint.writes:当queue.type: persisted时,设置最大接收多少个写event后更新检查点,如果设置为0,则表示不限制;默认:1024;
  • queue.drain:当queue.type: persisted时,设置为true,则执行关闭操作时,清空queue后再关闭;默认:false;
  • dead_letter_queue.enable:设置是否使用dead_letter_queue;默认:false;
  • dead_letter_queue.max_bytes:设置dead_letter_queue存放的最大数据量,超过数据量,则会删除队列中的节点;默认:1024mb;
  • path.dead_letter_queue:设置dead_letter_queue数据文件存放路径,默认:path.data/dead_letter_queue;
  • http.host:设置rest接口绑定ip地址,默认:"127.0.0.1";
  • http.port:设置rest接口绑定端口,默认:9600;
  • log.level:设置日志级别,取值(fatal/error/warn/info/debug/trace),默认:info;
  • log.format:设置日志格式,取值(json/plain),默认:plain;
  • path.logs:设置日志文件存放目录,默认:LOGSTASH_HOME/logs;
  • path.plugins:设置定制组件存放路径,组件存放的目录结构PATH/logstash/TYPE/NAME.rb,其中type取值(inputs/filters/outputs/codecs),默认:LOGSTASH_HOME/logs/plugins;

命令行运行logstash

运行logstash命令格式如下:

bin/logstash [options]

通过-f选项可以指定pipeline配置文件;

bin/logstash -f mypipeline.conf

通过命令行配置的参数将会覆盖logstash.yml中相应的参数;

常用命令行参数

  • --node.name NAME:同logstash.yml的node.name;
  • -f, --path.config CONFIG_PATH:指定logstash的配置文件或者配置文件目录,如果配置为目录,则会按照字母排序,将多个配置文件合成一个;相同的配置项,取最新的配置项覆盖之前的同名配置项;
  • -e, --config.string CONFIG_STRING:同config.string;
  • --modules:指定module的名称,如果涉及多个module,则通过逗号分隔,或者配置多个--modules参数;使用--modules将会忽略logstash.yml中的modules配置;
  • -M, --modules.variable:配合--modules,用于指定module中需要用到的变量,如果未指定,则使用默认值;如果未配置--modules,则忽略该参数;
  • --pipeline.id ID:同logstash.yml的pipeline.id;
  • -w, --pipeline.workers COUNT:同logstash.yml的pipeline.workers;
  • -b, --pipeline.batch.size SIZE:同logstash.yml的pipeline.batch.size;
  • -u, --pipeline.batch.delay DELAY_IN_MS:同logstash.yml的pipeline.batch.delay;
  • --pipeline.unsafe_shutdown:同logstash.yml的pipeline.unsafe_shutdown;
  • --path.data PATH:同logstash.yml的path.data;
  • -p, --path.plugins PATH:同logstash.yml的path.plugins;
  • -l, --path.logs PATH:同logstash.yml的path.logs;
  • --log.level LEVEL:同logstash.yml的log.level;
  • --config.debug:同logstash.yml的config.debug;
  • -i, --interactive SHELL:使用指定shell替换当前shell;可选值:irb/pry;
  • -t, --config.test_and_exit:同logstash.yml的config.test_and_exit;
  • -r, --config.reload.automatic:同logstash.yml的config.reload.automatic;
  • --config.reload.interval RELOAD_INTERVAL:同logstash.yml的config.reload.interval;
  • --http.host HTTP_HOST:同logstash.yml的http.host;
  • --http.port HTTP_PORT:同logstash.yml的http.port;
  • --log.format FORMAT:同logstash.yml的log.format;
  • --path.settings SETTINGS_DIR:指定包含logstash.yml和log4j配置文件的目录;也可以使用$LS_SETTINGS_DIR环境变量配置;
  • -h, --help:打印帮助信息;
  • -V, --version:查看当前logstash的版本;

常用环境变量

  • $LOGSTASH_HOME:logstash安装根目录;
  • $LS_HEAP_SIZE:logstash堆内存大小设置;
  • $LS_SETTINGS_DIR:指定logstash的logstash.yml和log4j配置文件目录;

logstash安装x-pack

logstash安装x-pack流程输入下:

image

1)下载x-pack安装包,如果部署elasticsearch时已经下载,则直接使用即可,下载地址: https://artifacts.elastic.co/downloads/packs/x-pack/x-pack-6.2.2.zip
2)执行安装命令:

bin/logstash-plugin install file:///path/to/file/x-pack-6.2.2.zip

注:此处的安装包路径一定是绝对路径,直接使用压缩包安装即可,无需解压;格式类似:file://路径

安装成功后,日志类似如下:

Installing file: /home/work/x-pack-6.2.2.zip
Install successful

3)设置logstash的监控的elasticsearch地址以及用户名和密码,使用内置用户logstash_system即可;

xpack.monitoring.elasticsearch.url: "http://elasticsearch_ip:port"
xpack.monitoring.elasticsearch.username: "logstash_system"
xpack.monitoring.elasticsearch.password: "Huawei@1990"

4)启动logstash,查看kibana上已经出现了被监控的logstash实例;

image

问题

1)部署了多个logstash,在kibana上却只显示一个实例?

原因:logstash的唯一性标识是通过启动时候在${LOGSTASH_HOME}/data/uuid文件中创建的uuid来保证的。如果部署的时候使用相同的uuid,比如直接拷贝部署文件的情况,将导致kibana上只有一个实例的情况。
解决办法:关闭logstash,删除${LOGSTASH_HOME}/data/uuid文件,重启logstash;
参考:Kibana monitoring, logstash only one node

参考

官方文档:Settings File
官方文档:Running Logstash from the Command Line
官方文档:Setting Up X-Pack

网友评论

登录后评论
0/500
评论
积淀
+ 关注