elastic stack学习--logstash配置
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执行模型 每个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流程输入下: 1)下载x-pack安装包,如果部署elasticsearch时已经下载,则直接使用即可,下载地址: https://artifacts.elastic.co/downloads/packs/x-pack/x-pack-6.2.2.zip2)执行安装命令: 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实例; 问题 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