ELKR日志系统(二)

在上一节实验中,我们已经搭建好了基本的软件环境,但是这离我们成功获取日志并进行分析和可视化还有很长的路要走。

在上一节中初步介绍了一套完整的 ELK 技术栈结构,要一次性部署完这套日志分析系统的各个组件,是比较困难的。这里我们将架构进行简化,结果如下图所示:

此处输入图片的描述

配置Logstash

Logstash 是打通日志文件和 Elasticsearch 之间的一个枢纽。和各种服务一样,Logstash 也有着自己的一套配置规则。

Logstash 的配置主要分为三大部分:inputfilteroutput

在讲解 Logstash 之前,我们先在 Logstash 目录下执行如下命令:

$ cd logstash-7.4.1/bin
# 测试,`-e` 参数表示立即执行
$ ./logstash -e 'input { stdin { } } output { stdout {codec=>json} }'

这时,终端会等待输入,我们可以简单的输入 hello shiyanlou 这时会看到有如下输出:

此处输入图片的描述

执行过程可能比较慢,需要耐心等待一会儿:

图片描述

使用 ctrl+c 关闭当前 Logstash 执行的配置。

配置语法

我们先来观察刚才命令中的字符串:

'input { stdin { } } output { stdout {codec=>json} }'

将其格式化后:

input {
  stdin {}
}
output {
  stdout {
    codec => json
  }
}

其中,stdin {} 表示标准输入,stdout {} 表示标准输出,在这个字符串中,其实定义了 Logstash 的两个行为 input 和 output

在 input 中,我们定义了一个标准输入,由于什么都没有,所以 Logstash 会从终端的标准输入中读取字符串,这也是为什么刚才在输入完命令后会出现等待输入的情况。

在 output 中,我们定义了一个标准输出,也就是说 Logstash 在处理完后会将结果从标准输出(终端)中输出,而 codec 字段,则说明了输出会遵循什么样的格式,这里定义的 codec 为 json,所以我们刚才看到了一套标准的输出格式。

有了对 Logstash 配置语法的基本认识,我们可以开始配置从 Log 到 Logstash 再到 Elasticsearch 的配置文件了。

配置 Log->Logstash->Elasticsearch

由于 Logstash 的配置很长,所以我们不太可能在一行命令中把整个配置写好,所以我们可以提前创建 Logstash 配置文件:

cd /home/shiyanlou/logstash-7.4.1
mkdir conf.d && cd conf.d
touch logstash-shipper.conf

我们现在要将日志文件作为输入,将日志分析系统elasticsearch作为输出

input {
  stdin {}
  file {
    path => "/home/shiyanlou/Code/elk/access.log"
    start_position => "beginning"
    codec =>  multiline {
      negate => true
      pattern => '^\d'
      what => 'previous'
    }
  }
}

output {
    stdout {
        codec => rubydebug
    }
    elasticsearch {
        hosts => ["localhost:9200"]
        index => "logstash-%{+YYYY.MM.dd}"
    }
}

在这份配置中,我们加入了文件输入的配置,加入了 elaticsearch 分析系统的输入。 我们将 input 定义加入 file (文件)输入,并设置 start_position 从第一行开始,保证能够导入旧数据。 输出,此种举动一方面可以方便我们日后进行调试,另一方面可以将其作为 Logstash 的日志进行输出。

而 elasticsearch 则给出了向 elasticsearch 输入数据的申明。

执行命令检测配置文件是否正确:

cd logstash-7.4.1
bin/logstash -f conf.d/logstash-shipper.conf --config.test_and_exit

--config.test_and_exit 选项表示检测配置文件并报告错误(只是检测,不会真正执行)

需要等待一会儿执行完成:

图片描述

配置没问题后,还是上面那条命令,去掉 --config.test_and_exit 选项,再次执行:

cd logstash-7.4.1
bin/logstash -f conf.d/logstash-shipper.conf

等待一会儿执行完成:

图片描述

此时 Logstash 运行在前台,如果使用快捷键 ctrl+c 就会结束当前进程,Logstash 就不会向 Elasticsearch 发送数据。

配置Kibana

在前面的实验中,我们运行 Logstash:

cd logstash-7.4.1
bin/logstash -f conf.d/logstash-shipper.conf

可以不断地搜集 Nginx 访问日志信息,并发送到 Elasticsearch。我们可以在浏览器中,通过 Kibana 查看这些日志数据。

输入地址:localhost:5601 就可以访问首页:

图片描述

点击 Management -> Kibana 下方的 Index Patterns -> Create index pattern:

图片描述

在 Index pattern 中填写 logstash-*,然后点击 Next step:

图片描述

然后需要配置一个索引模式,这里可以直接使用默认索引模式 @timestamp,然后点击 Create index pattern:

图片描述

可以看到,Kibana 默认为我们创建了 16 个字段(fields):

图片描述

点击左侧边栏的 Discover ,进入到 Kibana 的全局搜索界面,这个时候还没有任何的统计数据:

图片描述

浏览器访问 nginx 首页,地址:localhost,可以尝试多刷新几次页面:

图片描述

然后切换到 Kibana 页面并刷新可以看到更多统计信息:

图片描述

右上角可以选择数据记录的时间段:

图片描述

KIbana 具有丰富的图表工具,能够以多种方式来分析数据,我们将尝试使用图表来分析每分钟 nginx 日志记录。 

可以看到这里自动为我们创建好了面积图:

图片描述

右侧即是面积图,Y 轴代表 nginx 日志的请求总数(Count),可以看到有 7 条记录。X 代表分钟间隔,从这个表中,可以很直观地看出 Nginx 每半分钟(30 秒)日志记录数量,以及变化趋势。从而可以判断当前 Nginx 的负载情况。

如果数据较少,可以向 access.log 中添加伪造数据,或者多次刷新 nginx 页面

也可以通过左边的选项自定义数据类型:

图片描述

X 轴的配置指标:

Aggressive:Date Histogram 。表示聚合方式为日期直方图。

Field:@timestamp 。字段为 @timestamp 。

Minimum Interval:Auto 。系统自动设置时间。

Kibana 也支持将统计结果保存,以便于下次快速查看最新统计结果。点击左上角的 Save 按钮,输入保存的名字,点击保存即可:

图片描述

图片描述

下次再打开 Visualize 时,就可以看到保存的记录,就可以快速查看统计情况:

图片描述

 

如果你保存了多个可视化数据时,你可以创建一个 Dashboard,以便于可以快速查看全部统计数据:

创建新的 Dashboard:

图片描述

添加已保存的统计图表数据:

图片描述

我们刚才保存的 Nginx logs1

图片描述

Nginx logs1 的统计图表添加到了下方面板:

图片描述

Redis作为缓冲区 

Redis 本身并不属于 ELK 技术栈里的一份子,而是作为一个插件存在于 ELK 技术栈中。Redis 提供了一个很好的缓冲区,它能够很好地帮助我们在主节点上屏蔽掉多个从节点之间不同日志文件的差异,从而使用 Redis 对数据的产生和使用进行了分层。

修改配置文件,将 Logstash 的 input 设置为 Redis,从 Redis 中读取日志数据,进入 /home/shiyanlou/logstash-7.4.1

cd /home/shiyanlou/logstash-7.4.1
mkdir conf.d && cd conf.d
vim logstash-indexer.conf

添加以下内容:

input {
    redis {
        host => "localhost"
        type => "redis"
        data_type => "list"
        key => "logstash"
    }
}
output {
    stdout {
        codec => rubydebug
    }
    elasticsearch {
        hosts=>["localhost:9200"]
        index=>"logstash-%{+YYYY.MM.dd}"
    }
}

图片描述

 

配置 Logstash 的 output 为 Redis,将日志数据输出到 Redis,编辑 logstash-shipper.conf:

vim /home/shiyanlou/logstash-7.4.1/conf.d/logstash-shipper.conf

向文件中写入如下代码:

input {
  stdin {}
  file {
    path => "/home/shiyanlou/Code/elk/access.log"
    start_position => beginning
    codec =>  multiline {
      negate => true
      pattern => '^\d'
      what => 'previous'
    }
  }
}
output {
    stdout {
        codec => rubydebug
    }
    redis {
        host => "localhost"
        data_type => "list"
        key => "logstash"
    }
}

打开两个终端页面:一个模拟 Slave Node 的 Logstash 进程,一个模拟 Master Node 的 Logstash 进程。

启动 Shipper 进程,指定配置文件为 logstash-shipper.conf

cd logstash-7.4.1
bin/logstash -f conf.d/logstash-shipper.conf

在另一个终端启动 Indexer 进程,指定配置文件为 logstash-indexer.conf

mkdir -p /home/shiyanlou/data/logstash
cd logstash-7.4.1
bin/logstash -f conf.d/logstash-indexer.conf --path.data /home/shiyanlou/data/logstash

在同一台主机上启动多个 logstash 进程需要将它们的数据目录分开,这里通过 --path.data 选项给第二个进程分配了一个单独的目录。

此处输入图片的描述

在 Shipper 中输入数据:hello shiyanlou:

图片描述

然后可以在 Indexer 中看到对应的输出:

图片描述

所以 Indexer 进程也会接收到新产生的数据。这个过程中,Shipper 产生数据,输入到 Redis 队列中,Indexer 从 Redis 中读取新的数据。在集群环境中,可以将 Shipper 进程部署到各个节点服务器,只需要在 master 节点服务器上部署 Indexer 即可管理全部日志信息

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值