设为首页 收藏本站
查看: 1749|回复: 0

[经验分享] 日志监控_ElasticStack

[复制链接]

尚未签到

发表于 2019-1-29 13:04:37 | 显示全部楼层 |阅读模式
  技术栈线:
  

  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.运维网.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 {},否则进程运行一会儿就会自动退出.
  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-669201-1-1.html 上篇帖子: logstash 多行合并 下篇帖子: elk的备份与恢复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表