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