日誌監控_ElasticStack-0001.Logstash快速規範化部署與後臺運行?

技術棧線:前端

wKiom1hIDFyjbuIAAAJMIsTSBRQ088.png

1. 支持靈活的處理方式,Elasticsearch是實時全文索引,無需像其它的產品樣預先編程才能實現java

2. 支持簡單的配置方式,Elasticsearch是所有采用JSON接口,Logstash是Ruby DSL設計,都是通用配置語法node

3. 支持高效的數據檢索,雖然每次查詢都是實時計算,但基本上能夠實現全天數據查詢的秒級響應python

4. 支持方便的線性擴展,無論是Elasticsearch集羣仍是Logstash集羣均可以線性擴展編程

4. 支持絢麗的前端展現,Kibana界面上只須要點擊鼠標,就能夠完成搜索,聚合,生產絢麗的儀表盤數組



常規架構:ruby

wKiom1hIDRzBOyZTAAEVdAxE0LY758.png


簡單介紹:bash


說明: Logstash做爲一款接收,處理,輸出日誌的工具,能夠處理各類各樣的日誌,由JRuby編寫,支持大量的配套插件,於2013年被Elasticsearch收購,正式成爲Elastic Stack的一員.架構


現包安裝:app


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 {},不然進程運行一下子就會自動退出.

相關文章
相關標籤/搜索