您好,登錄后才能下訂單哦!
技術棧線:
1. 支持靈活的處理方式,Elasticsearch是實時全文索引,無需像其它的產品樣預先編程才能實現
2. 支持簡單的配置方式,Elasticsearch是全部采用JSON接口,Logstash是Ruby DSL設計,都是通用配置語法
3. 支持高效的數據檢索,雖然每次查詢都是實時計算,但基本上可以實現全天數據查詢的秒級響應
4. 支持方便的線性擴展,不管是Elasticsearch集群還是Logstash集群都可以線性擴展
4. 支持絢麗的前端展示,Kibana界面上只需要點擊鼠標,就可以完成搜索,聚合,生產絢麗的儀表盤
常規架構:
簡單介紹:
說明: Logstash作為一款接收,處理,輸出日志的工具,可以處理各種各樣的日志,由JRuby編寫,支持大量的配套插件,于2013年被Elasticsearch收購,正式成為Elastic Stack的一員.
現包安裝:
rpm -qa |grep jdk |xargs rpm -e --nodeps yum -y install gcc cmake coreutils lsof pcre pcre-devel zlib zlib-devel coreutils lrzsz wget python-setuptools epel-release yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel nc jq rpm -ivh https://artifacts.elastic.co/downloads/logstash/logstash-5.0.0.rpm
源碼部署:
# 安裝 JAVA 運行 環境 rpm -qa |grep jdk |xargs rpm -e --nodeps yum -y install gcc cmake coreutils lsof pcre pcre-devel zlib zlib-devel coreutils lrzsz wget python-setuptools epel-release yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel nc jq java -version # 創建 LOGSTASH目錄 mkdir -p /xm-workspace/xm-apps/logstash/ tar -zxvf logstash-5.0.0.tar.gz mv logstash-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" not in [tags] { } else if [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: control logstash start|stop|force-stop|status|restart # # # customer env name=logstash pidfile="/var/run/${name}.pid" LS_HOME=/xm-workspace/xm-apps/logstash export PATH=/sbin:/usr/sbin:/bin:/usr/bin:${LS_HOME}/bin # must use root if [ `id -u` -ne 0 ]; then echo "You need root privileges to run this script" exit 1 fi # optimizations LS_HEAP_SIZE="1024m" LS_OPEN_FILES=102400 # logstash comm # LS_OPTS="--debug" LS_OPTS="--quiet" LS_LOG_DIR=${LS_HOME}/logs LS_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} export PATH HOME LS_HEAP_SIZE LS_JAVA_OPTS LS_USE_GC_LOGGING ulimit -n ${LS_OPEN_FILES} # Run the program! bash -c " cd $LS_HOME ulimit -n ${LS_OPEN_FILES} exec \"$program\" $args " 2> "${LS_LOG_DIR}/${name}-error.log" &>/dev/null & echo $! > $pidfile echo "${name} started." return 0 } stop() { if status ; then pid=`cat "$pidfile"` echo "Killing ${name} (pid $pid) with SIGTERM" kill -TERM $pid for i in 1 2 3 4 5 ; do echo "Waiting ${name} (pid $pid) to die..." status || break sleep 1 done if status ; then echo "${name} stop failed; still running." else echo "${name} stopped." fi fi } status() { if [ -f "$pidfile" ] ; then pid=`cat "$pidfile"` if kill -0 $pid > /dev/null 2> /dev/null ; then return 0 else return 2 fi else return 3 fi } force_stop() { if status ; then stop status && kill -KILL `cat "$pidfile"` fi } case "$1" in start) status code=$? if [ $code -eq 0 ]; then echo "${name} is already running" else start code=$? fi exit $code ;; stop) stop ;; force-stop) force_stop ;; status) status code=$? if [ $code -eq 0 ] ; then echo "${name} is running" else echo "${name} is not running" fi exit $code ;; restart) stop && start ;; *) echo "Usage: ${SCRIPTNAME} {start|stop|force-stop|status|restart}" >&2 exit 3 ;; esac exit $?
注意: 為了使Logstash后臺運行,不管是nohub ... &還是screen還是supervisord管理進程時千萬不要把配置目錄中的配置文件中的input {}區段設置為測試用的stdin {},否則進程運行一會兒就會自動退出.
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。