日志监控_ElasticStack-0001.Logstash快速规范化部署与后台运行?
技术栈线:
1. 支持灵活的处理方式,Elasticsearch是实时全文索引,无需像其它的产品样预先编程才能实现
2. 支持简单的配置方式,Elasticsearch是全部采用JSON接口,Logstash是Ruby DSL设计,都是通用配置语法
3. 支持高效的数据检索,虽然每次查询都是实时计算,但基本上可以实现全天数据查询的秒级响应
4. 支持方便的线性扩展,不管是Elasticsearch集群还是Logstash集群都可以线性扩展
4. 支持绚丽的前端展示,Kibana界面上只需要点击鼠标,就可以完成搜索,聚合,生产绚丽的仪表盘
常规架构:
简单介绍:
说明: Logstash作为一款接收,处理,输出日志的工具,可以处理各种各样的日志,由JRuby编写,支持大量的配套插件,于2013年被Elasticsearch收购,正式成为Elastic Stack的一员.
现包安装:
rpm-qa|grepjdk|xargsrpm-e--nodepsyum-yinstallgcccmakecoreutilslsofpcrepcre-develzlibzlib-develcoreutilslrzszwgetpython-setuptoolsepel-releaseyuminstalljava-1.8.0-openjdkjava-1.8.0-openjdk-develncjqrpm-ivhhttps://artifacts.elastic.co/downloads/logstash/logstash-5.0.0.rpm
源码部署:
#安装JAVA运行环境rpm-qa|grepjdk|xargsrpm-e--nodepsyum-yinstallgcccmakecoreutilslsofpcrepcre-develzlibzlib-develcoreutilslrzszwgetpython-setuptoolsepel-releaseyuminstalljava-1.8.0-openjdkjava-1.8.0-openjdk-develncjqjava-version#创建LOGSTASH目录mkdir-p/xm-workspace/xm-apps/logstash/tar-zxvflogstash-5.0.0.tar.gzmvlogstash-5.0.0/*/xm-workspace/xm-apps/logstash/#创建配置文件目录mkdir-p/xm-workspace/xm-apps/logstash/etc/logstash.d
常用参数:
-n指定Logstash实例的名称,如果未指定,默认为主机名-f指定Logstash配置文件或目录,如果指定目录则合并目录中配置文件-e指定Logstash配置数据,以字符串的形式指定,常用于手工测试-l指定Logstash日志文件目录,默认安装目录下logs目录--debug开启Logstash调试模式--log.level指定Logstash日志级别,fatal/error/warn/info/debug/trace--config.debug指定Logstash打印配置合并日志,开启前提是打开调试模式--debug以及设置日志级别-t测试Logstash配置文件,,必须配合-f使用-r设置Logstash自动重载配置文件,必须配合-f使用--config.reload.interval设置Logstash重载配置周期,默认为3秒--http.host设置LogstashAPI监听地址--http.port设置LogstashAPI监听端口--quiet设置 Logstash为安静模式注意: 当-f指定目录时,Logstash会自动读取目录下所有*.conf配置文件,按照字母排序,然后在内存中拼接成一个完整的大配置文件加载,推荐采用数字编号方式命名配置文件,且同时在配置中严谨使用if判断限定不同日志的动作,还有就是从5.0开始所有的命令行配置都可通过/xm-workspace/xm-apps/logstash/config/logstash.yml文件设置.
快速测试:
/xm-workspace/xm-apps/logstash/bin/logstash-e'input{stdin{}}output{stdout{codec=>rubydebug}}'--debug
{"@timestamp"=>2016-12-06T08:37:52.922Z,"@version"=>"1","host"=>"YunChanPinXian","message"=>"limanman"}
说明: 数据以事件对象的形式在线程之间传递,Logstash会自动为事件对象添加一些额外信息,最重要的就是@timestamp,用来标记事件的发生时间,此字段以joda时间对象的形式内部流转,而且还支持在过滤插件中通过add_tag/remove_tag/add_field/remove_field对事件对象添加删除标签数组和自定义字段.
配置语法:
1. Logstash设计了自己的DSL(类似Puppet的DSL)来描述配置,使用{}定义区域,区域内可以包含多个插件区域,插件域内可以定义对应区域的键值对设置
2. Logstash支持少量的数据类型如bool类型(debug => true),string类型(host => "hostname"),number类型(port => 514),array类型(match => ["datetime", "UNIX", "ISO8601"]),hash类型(options => {key1 => "value1",key2 => "value2"})
3. Logstash支持字段引用,由于字段可以是hash或array类型,所以可通过[field]来还原字段对象,而且还支持正倒序下标检索子元素,如果要在字符串中使用字段引用可通过%{[field][...]}实现
4. Logstash支持==等于/!=不等于/<小于/>大于/<=小于等于/>=大于等于/=~匹配/!~不匹配/in包含/not in不包含/and与/or或/nand非与/xor非或/()复合表达式/!()取反复合表达式
if"_grokparsefailure"notin[tags]{}elseif[status]!~/^2\d\d/or([url]=="/noc.gif"nand[geoip][city]!="beijing"){}else{}
后台运行:
#!/bin/sh#-*-coding:utf-8-*-###Authors:limanman#OsChina:http://xmdevops.blog.51cto.com/#Purpose:controllogstashstart|stop|force-stop|status|restart###customerenvname=logstashpidfile="/var/run/${name}.pid"LS_HOME=/xm-workspace/xm-apps/logstashexportPATH=/sbin:/usr/sbin:/bin:/usr/bin:${LS_HOME}/bin#mustuserootif[`id-u`-ne0];thenecho"Youneedrootprivilegestorunthisscript"exit1fi#optimizationsLS_HEAP_SIZE="1024m"LS_OPEN_FILES=102400#logstashcomm#LS_OPTS="--debug"LS_OPTS="--quiet"LS_LOG_DIR=${LS_HOME}/logsLS_CONF_DIR="${LS_HOME}/etc/logstash.d"[!-d${LS_HOME}]&&mkdir-p${LS_HOME}[!-d${LS_LOG_DIR}]&&mkdir-p${LS_LOG_DIR}[!-d${LS_CONF_DIR}]&&mkdir-p${LS_CONF_DIR}program=${LS_HOME}/bin/${name}args="-f${LS_CONF_DIR}-l${LS_LOG_DIR}${LS_OPTS}"start(){LS_JAVA_OPTS="${LS_JAVA_OPTS}-Djava.io.tmpdir=${LS_HOME}"HOME=${LS_HOME}exportPATHHOMELS_HEAP_SIZELS_JAVA_OPTSLS_USE_GC_LOGGINGulimit-n${LS_OPEN_FILES}#Runtheprogram!bash-c"cd$LS_HOMEulimit-n${LS_OPEN_FILES}exec\"$program\"$args"2>"${LS_LOG_DIR}/${name}-error.log"&>/dev/null&echo$!>$pidfileecho"${name}started."return0}stop(){ifstatus;thenpid=`cat"$pidfile"`echo"Killing${name}(pid$pid)withSIGTERM"kill-TERM$pidforiin12345;doecho"Waiting${name}(pid$pid)todie..."status||breaksleep1doneifstatus;thenecho"${name}stopfailed;stillrunning."elseecho"${name}stopped."fifi}status(){if[-f"$pidfile"];thenpid=`cat"$pidfile"`ifkill-0$pid>/dev/null2>/dev/null;thenreturn0elsereturn2fielsereturn3fi}force_stop(){ifstatus;thenstopstatus&&kill-KILL`cat"$pidfile"`fi}case"$1"instart)statuscode=$?if[$code-eq0];thenecho"${name}isalreadyrunning"elsestartcode=$?fiexit$code;;stop)stop;;force-stop)force_stop;;status)statuscode=$?if[$code-eq0];thenecho"${name}isrunning"elseecho"${name}isnotrunning"fiexit$code;;restart)stop&&start;;*)echo"Usage:${SCRIPTNAME}{start|stop|force-stop|status|restart}">&2exit3;;esacexit$?
注意: 为了使Logstash后台运行,不管是nohub ... &还是screen还是supervisord管理进程时千万不要把配置目录中的配置文件中的input {}区段设置为测试用的stdin {},否则进程运行一会儿就会自动退出.
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。