logStash+ES综合案例

LK Stack全量日志查询

在实际工作当中,我们经常会对服务器当中产生的各种日志比较感兴趣,因为产生的日志可以很好的说明我们的服务器的工作状态是否正常,日志的也可以供我们排查各种错误等。所以很多时候我们都会收集各种日志进行汇总,方便我们统一的查看,有了ELK技术栈之后,我们就可以很轻松方便的使用logstash来进行收集我们的日志数据,然后将数据存储到ES当中,然后通过kibana的可视化工具来查看我们的日志数据了

 

  1. 采集服务器运行产生的日志

1.1、rsyslog的基本介绍

每台linux服务器运行的时候,系统都会产生一些日志出来,我们可以收集这些日志以便于我们查看linux服务器运行的状况等

Rsyslog 是CentOS6.X 自带的一款系统日志工具:

具有以下多种特性

1.支持多线程

2.支持TCP,SSL,TLS,RELP 等协议

3.支持将日志写入MySQL, PGSQL, Oracle 等多种关系型数据中

4.拥有强大的过滤器,可实现过滤系统信息中的任意部分

5.可以自定义日志输出格式

接下来我们来看如何通过rsyslog来收集我们的系统日志

Rsyslog 配置文件介绍:

/etc/rsyslog.conf 文件:

*.info;mail.none;authpriv.none;cron.none

/var/log/messages.

各类型日志存放位置

cron.*

/var/log/cron

具体日志存放的位置

authpriv.*

/var/log/secure

认证授权认证

mail.*

-/var/log/maillog

邮件日志

cron.*

/var/log/cron

任务计划相关日志

kern

 

内核相关日志

lpr

 

打印

mark(syslog)

 

rsyslog 服务内部的信

息,时间标识

news

 

新闻组

user

 

用户程序产生的相关信

uucp

 

协议

local 0~7

 

用户自定义日志级别

 

日志级别:

rsyslog 共有7 种日志级别,数字代号从 0~7。具体的意义如下所示:

0 debug –有调式信息的,日志信息最多

1 info 一般信息的日志,最常用

2 notice –最具有重要性的普通条件的信息

3 warning –警告级别

4 err –错误级别,阻止某个功能或者模块不能正常工作的信息

5 crit –严重级别,阻止整个系统或者整个软件不能正常工作的信息

6 alert –需要立刻修改的信息

7 emerg –内核崩溃等严重信息

本项目中,将日志级别调整成3,并将日志信息发送至node01服务器的6789这个端口

 

修改rsyslog的配置文件

我们修改node01服务器的rsyslog的配置,

sudo vim /etc/rsyslog.conf

添加以下三行配置

local3.* /var/log/boot.log

*.warning /var/log/warning_Log

*.* @@node01:6789

重启linux服务器的rsyslog服务

执行以下命令重启rsyslog服务

sudo /etc/init.d/rsyslog restart

开发logstash的配置文件,收集rsyslog日志

切换到logstash的配置文件目录下,开发logstash的配置文件

cd /export/servers/es/logstash-6.7.0/config

vim rsyslog.conf

input {
    tcp {
    port => "6789"   #监控6789端口
    type => "rsyslog"   #日志类型是rsyslog
   }
}
filter {
  if [type] == "rsyslog" {   # 做一次判断,只要从6789端口过来的rsyslog日志
    grok { # 通过正则表达式,取出想要的字段
      match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
      add_field => [ "received_at", "%{@timestamp}" ]
      add_field => [ "received_from", "%{host}" ]
    }
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ] #将系统的日志格式化成标准国际化时间
    }
  }
}
output{   #将日志打入elasticsearch
    if [type] == "rsyslog"{
       stdout{codec=>rubydebug}
       elasticsearch {
       action => "index"
       hosts  => "node01:9200"
       index  => "logstash-%{type}-%{+yyyy.MM.dd}"
   }
 }
}

启动logstash服务

执行以下命令启动logstash服务

cd /export/servers/es/logstash-6.7.0

bin/logstash -f config/rsyslog.conf

采集服务器用户操作所有历史日志

用户在命令行环境下的操作日志都会被系统记录下来;比如我们输入history命令,都会展示出每一个用户输入过的命令;

.bash_history文件,这个日志格式我们可以定义成我们需要显示的内容,方便我们排查或者做入侵检查的时候;

自定义日志格式:

HISTFILESIZE=4000     #保存命令的记录总数

HISTSIZE=4000         #  history 命令输出的记录数

HISTTIMEFORMAT='%F %T'   #输出时间格式

export HISTTIMEFORMAT.  #自定义日志输出格式,也就是取出我们想要的字段,以json的形式

HISTTIMEFORMAT修改线上的相关格式

PROMPT_COMMAND实时记录历史命令(一般用在存储history命令道文件中)

第一步:定义日志格式

修改/etc/bashrc配置文件,然后添加以下配置

sudo  vim /etc/bashrc

HISTDIR='/var/log/command.log'

if [ ! -f $HISTDIR ];then

touch $HISTDIR

chmod 666 $HISTDIR

fi

export HISTTIMEFORMAT="{\"TIME\":\"%F%T\",\"HOSTNAME\":\"$HOSTNAME\",\"LI\":\"$(who am i 2>/dev/null| awk '{print $NF}'|sed -e's/[()]//g')\",\"LOGIN_USER\":\"$(who am i|awk '{print$1}')\",\"CHECK_USER\":\"${USER}\",\"CMD\":\""

 

export PROMPT_COMMAND='history 1|tail -1|sed "s/^[ ]\+[0-9]\+  //"|sed "s/$/\"}/">>/var/log/command.log'

使配置修改立即生效

这个命令必须使用root用户来执行

export PROMPT_COMMAND='history >> /var/log/command.log'

source /etc/bashrc

第二步:开发logstash的配置文件

继续开发我们logstash的配置文件

cd /export/servers/es/logstash-6.7.0/config

vim history.conf

input {
    file {
        path => ["/var/log/command.log"]
        type => "command"
        codec => "json"
    }
  }
output{
    if [type] == "command"{
       stdout{codec=>rubydebug}
       elasticsearch {
       hosts  => "node01:9200"
       index  => "history-%{+yyyy.MM.dd}"
   }
 }
}

第三步:启动logstash

启动logstash:

cd /export/servers/es/logstash-6.7.0

bin/logstash -f config/history.conf

执行source,让环境变量立即生效

source /etc/bashrc

node01服务器任意目录执行任意命令,然后去9100页面,查看是否已经把history日志灌入elasticsearch

 

采集nginx日志到es当中

 

第一步:上传日志文件

node01机器创建文件夹,将我们的nginx的日志都上传到

/export/servers/es/esdatas

mkdir -p  /export/servers/es/esdatas

第二步:开发logstash的配置文件
cd /export/servers/es/logstash-6.7.0/config
vim nginxlog.conf
input{
  file {
	path =>  "/export/servers/es/esdatas/access.log"
        type => "access.log"
 	start_position => "beginning"
	}
}
filter {  
    grok {
            match => {
           	   "message" => "%{IPORHOST:clientip} \- \- \[%{HTTPDATE:time_local}\] \"(?:%{WORD:method} %{NOTSPACE:request}(?:HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:status} %{NUMBER:body_bytes_sent} %{QS:http_referer}"
		 }
        }
}
output {
       stdout{codec=>rubydebug}
       elasticsearch {
                action => "index"
                hosts =>"node01:9200"
                index => "nginxes"
     }
}

第三步:启动logstash并查看es当中的数据

执行以下命令启动logstash

cd /export/servers/es/logstash-6.7.0

bin/logstash -f /export/servers/es/logstash-6.7.0/config/nginxlog.conf

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值