Elastic Stack+Grafana日志监控

by:垃圾程序员

一、引言

1.1背景介绍

虚假原因:在现代化的应用程序和系统中,日志数据是非常重要的信息源,可以用于监控系统状态、诊断问题、发现异常行为和优化性能等。由于日志数据量通常很大,并且包含各种类型的信息,因此需要强大的工具来收集、存储、分析和可视化这些数据,以便用户能够快速、有效地理解和利用这些信息。

真实原因:那是一个阳光明媚的周末,和家里的两位公主在外面搭好帐篷愉快挖沙子呢,电话来了,线上bug,好好好,排查吧。虽然最后原因是别的问题,但是单独排查每个服务的日志也是一番苦战,这也体现了统一日志收集的重要性。

1.2Elastic Stack 和 Grafana 简介

1.2.1Elastic Stack概述

ELK Stack:Elasticsearch、Kibana、Beats 和 Logstash | Elastic能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视化。...icon-default.png?t=N7T8https://www.elastic.co/cn/elastic-stack什么是Elastic Stack?直接上权威:

咱们可以认为Elastic Stack是一个开源的数据分析解决方案组合,由多个工具组件组成,主要用于实时搜索、数据分析和可视化。它的核心是Elasticsearch、Logstash、Kibana以及Beats。

  • Elasticsearch: 分布式搜索和分析引擎,用于实时地存储、搜索和分析数据。它支持全文搜索、结构化搜索、分析功能等,广泛应用于日志分析、应用性能监控、业务指标分析等场景。

  • Logstash: 数据收集管道工具,能够从多个来源(例如日志文件、数据库、消息队列等)中采集、转换和存储数据,然后将数据发送到Elasticsearch等目标存储中。

  • Kibana: 数据分析和可视化平台,提供了强大的图形化界面,用于搜索、查看、分析和交互地理解存储在Elasticsearch中的数据。用户可以创建各种图表、仪表盘、报告等。

  • Beats: 轻量级数据收集器,用于采集各种类型的数据并将其发送到Elasticsearch或Logstash。Beats系列包括Filebeat(文件数据)、Metricbeat(指标数据)、Packetbeat(网络数据)、Winlogbeat(Windows事件日志)等。

1.2.2Grafana 作为可视化工具的作用

Grafana | 查询、可视化、警报观测平台Grafana 功能概述、截图、视频和功能演示。icon-default.png?t=N7T8https://grafana.com/zh-cn/grafana/?tab=revenue什么是Grafana?

 你看完了介绍,是不是有一个疑问,这和Elastic Stack的核心组件Kibana不是大同小异的东西嘛?为什么还要引入这个组件?带着这个问题我们继续阅读。

二、方案概述

当开发或运维人员开始搭建日志系统时,往往是基于上级的指示,可能只有一台物理或云服务器,依赖于自行查找的一篇文章就敢开始干。然而,若考虑部署于线上环境,则应保持慎重。应该依照现状进行设计,不光要确保日志系统架构的稳定性和扩展性,更要考虑整体集群,没有最好的方案,只有最合适的方案。

2.1整体架构流程图

看图的话,数据是呈线性流转的,总体架构不是很麻烦,当然上图是理想状态,安装的过程中还是要按照你的实际情况,本文中的搭建也将以单机为演示。

2.2各组件的角色和职责

  • Elasticsearch: 数据存储和搜索引擎。
  • Logstash: 数据处理和传输管道。
  • Filebeat: 日志文件收集器。
  • Grafana: 数据可视化和监控工具。
  • redis:作为高并发下的数据缓冲。

2.3版本选择

版本选择并不复杂,特别是对于生产环境,稳定性至关重要。最新版本的新功能通常不是首要考虑,因为可能存在未知的问题。关键是确保所选版本与操作系统兼容,不同插件版本是否匹配,且服务器有足够的资源来支持软件运行的最低要求。

当然这就需要仁者见仁智者见智了,以要安装的核心组件 Elasticsearch 为例,它依赖于 JVM(Java 虚拟机),因此需要考虑已安装的服务器上 JVM 的版本限制。不应该因为安装 Elasticsearch 需要更新 JVM 到新版本,这样成本太高。当然如果你是新搭建的生产环境,可以兼顾功能和技术栈来选择更新的版本。

我以自身的实际环境,确定出最终要安装的版本7.17.x。首先操作系统是CentOS7.9版本,其次JVM是1.8版本。这里有一个点,Elasticsearch 从 7.0.0 版本开始默认捆绑了自己的 JDK。这意味着在大多数情况下,Elasticsearch 不依赖于系统上安装的 JDK。你如果没有特殊需求,可以直接使用捆绑的JDK。

定好核心组件的版本后,其他组件依照这个版本选择就好

你可以按照这个思路找一下,查询地址如下:

支持一览表 | Elastic下表显示了有资格获得我们订阅产品支持的平台和软件配置。请进一步了解我们的支持政策和产品生命周期结束政策。没有看到您喜爱的平台、JVM 或浏览器?请联系我们。下载我们的软件需要 TLSv1.2 或更高版本。一些较旧的操作系统(或 libcurl、curl 和apt-get 或 yum 使用的 nss 库)可能需要升级到能够支持 TL...icon-default.png?t=N7T8https://www.elastic.co/cn/support/matrix#matrix_os

三、部署 Elastic Stack 、Redis和 Grafana

以下所有的操作均以内部防火墙关闭为默认条件进行,且所有组件都在同一文件夹下,如果你仅仅是想测试或者无需文件的强规划,我建议直接使用docker或者rpm安装,那将会大大降低配置繁琐度,增加体验。

3.1创建专属账户

sudo adduser elkc # 新增elkc用户
sudo passwd  elkc # 为elkc用户设置密码

你可能很困惑,用最高权限不好吗,为啥还得创建一个新的账号?这是因为Elasticsearch 不允许root用户直接运行,防止出现安全问题。

3.2Filebeat 部署

在了解了Filebeat的用途后,你是否会有一个疑问。如果我存在多个服务器,我是在每个服务器都安装Filebeat分布管理,还是在一台服务器上安装Filebeat集中管理?

最常用方式还是将 Filebeat 安装在每台物理服务器(A、B、C)上,直接收集本地日志并发送到日志服务器或 Logstash,可以确保日志收集的实时性和降低因为集中模式下宕机导致整个日志系统的不可用性。当然这种方式也有弊端,当某台服务器上的Filebeat 宕机,我们就收集不到那台服务器的日志了,而且每一台服务器都要安装Filebeat ,也造成了服务器资源的占用。

还记得方案概述的那句话吗?没有最好的方案,只有最合适的方案。

如果你的日志量不大,且希望简化运维,完全可以使用集中管理方案。在你设计方案时,希望你结合现状,选择最适合的方案。

3.2.1下载、解压 Filebeat安装包

#下载redis安装包
sudo wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.17.22-linux-x86_64.tar.gz

#解压redis安装包
sudo tar xzf filebeat-7.17.22-linux-x86_64.tar.gz

3.2.2配置Filebeat

这里先不进行修改,直接使用默认配置文件。

3.2.3托管服务并设置开机自启

 把Filebeat 托管给systemd,创建一个新的 systemd 服务单元文件

nano /etc/systemd/system/filebeat.service

按照实际情况修改下面的配置,复制进去

[Unit]
# 服务单元描述
Description=Filebeat
# 文档链接
Documentation=https://www.elastic.co/products/beats/filebeat
# 网络在线目标依赖
Wants=network-online.target
# 在网络在线目标之后启动
After=network-online.target

[Service]
# 启动命令及配置文件位置
ExecStart=/home/Filebeat/filebeat-7.17.22-linux-x86_64/filebeat -e -c /home/Filebeat/filebeat-7.17.22-linux-x86_64/filebeat.yml
# 总是重新启动服务
Restart=always
# 服务运行的用户
User=root
# 服务运行的用户组
Group=root

[Install]
# 当多用户模式启动时,启用此服务
WantedBy=multi-user.target

重新加载 systemd 守护进程以应用新的服务文件

sudo systemctl daemon-reload

启动 Filebeat 服务并使其在系统启动时自动启动

sudo systemctl start filebeat

sudo systemctl enable filebeat

到这一步,就完成Filebeat 的安装了。

3.3Redis部署

3.3.1下载、解压、编译安装 Redis 安装包

#下载redis安装包
sudo wget http://download.redis.io/releases/redis-6.2.6.tar.gz

#解压redis安装包
sudo tar xzf redis-6.2.6.tar.gz

#编译redis
cd redis-6.2.6
sudo make

#编译完成后,安装 Redis
sudo make install

3.3.2配置Redis

修改redis.conf配置文件,这里不设置认证密码了,如果你需要请自行设置

#监听的网络接口和地址,具体看你自己,如果是内网可以和我一样设置为全部可连接
bind 0.0.0.0

# 修改端口
port 6369

# 修改数据存储路径
dir /home/ElasticStack/Redis/data

# 修改日志存储路径
logfile /home/ElasticStack/Redis/logs/redis.log

# 启用 RDB 持久化
#表示在 900 秒(15 分钟)内,如果至少有 1 次写操作发生,Redis 就执行一次 RDB 持久化操作。
save 900 1
#表示在 300 秒(5 分钟)内,如果至少有 100 次写操作发生,Redis 就执行一次 RDB 持久化操作。
save 300 100
#表示在 60 秒内,如果至少有 10000 次写操作发生,Redis 就执行一次 RDB 持久化操作。
save 60 10000

# 启用 AOF 持久化
appendonly yes
appendfilename "appendonly.aof"

# AOF 同步方式,按需选择
# 每次写入同步(慢,安全):
# appendfsync always
# 每秒同步一次(推荐,平衡性能和安全):
appendfsync everysec
# 让操作系统决定何时同步(快,不安全):
# appendfsync no

3.3.3托管服务并设置开机自启

 把redis托管给systemd,创建一个新的 systemd 服务单元文件

nano /etc/systemd/system/redis.service

按照实际情况修改下面的配置,复制进去

[Unit]
# 描述这个服务是Redis内存数据存储
Description=Redis In-Memory Data Store
# 在网络服务加载后启动
After=network.target

[Service]
# 以root用户身份运行Redis服务
User=root
#使用root用户组
Group=root  
# 启动命令,指定Redis配置文件的路径
ExecStart=/home/ElasticStack/Redis/redis-6.2.6/src/redis-server /home/ElasticStack/Redis/redis-6.2.6/redis.conf
# 停止命令,使用Redis的CLI工具来优雅地关闭Redis服务
ExecStop=/home/ElasticStack/Redis/redis-6.2.6/src/redis-cli shutdown
# 如果服务意外终止,总是自动重启
Restart=always

[Install]
# 当多用户模式启动时,启用此服务
WantedBy=multi-user.target

重新加载 systemd 守护进程以应用新的服务文件

sudo systemctl daemon-reload

启动 redis 服务并使其在系统启动时自动启动

sudo systemctl start redis

sudo systemctl enable redis

到这一步,就完成redis的安装了。

3.4Logstash 部署

3.4.1下载、解压Logstash安装包

#下载logstash安装包
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.17.22-linux-x86_64.tar.gz

#解压安装包
tar -xzf logstash-7.17.22-linux-x86_64.tar.gz

3.4.2配置 Logstash

Logstash 的配置文件位于 config 目录下。编辑 logstash.yml 文件

#指定数据文件夹
path.data: /home/ElasticStack/Logstash/data

#指定日志文件夹
path.logs: /home/ElasticStack/Logstash/logs

3.4.3创建测试管道进行初步测试

在config目录下创建一个测试管道配置文件logstash-test.conf,里面写入

# Beats -> Logstash -> Elasticsearch pipeline.

input {
  stdin {}
}

output {
  stdout {}
}

回到logstash 的根目录,执行语句

bin/logstash -tf config/logstash-test.conf

如果出现下面的截图代表管道配置没问题,可以启动继续测试了

 启动服务

bin/logstash -f config/logstash-test.conf

现在你输入即会立刻输出配格式化后的数据信息,如下图所示:

3.4.4添加环境变量

使用文本编辑器打开 ~/.bashrc 文件

vi ~/.bashrc

在文件末尾添加以下行,将 Logstash 的 bin 目录添加到 PATH 变量中:

# logstash
export PATH=$PATH:/home/ElasticStack/Logstash/logstash-7.17.22/bin

保存并关闭文件后,执行以下命令使修改生效

source ~/.bashrc

执行logstash -V,出现版本就代表配置成功了。

3.4.5托管服务并设置开机自启

把logstash托管给systemd,创建一个新的 systemd 服务单元文件

nano /etc/systemd/system/logstash.service

按照实际情况修改下面的配置,复制进去

[Unit]
# Logstash服务描述
Description=Logstash
# Logstash文档链接
Documentation=https://www.elastic.co/products/logstash
# 在网络可用时启动
Wants=network-online.target
# 在网络可用后启动
After=network-online.target

[Service]
# 指定服务类型为简单类型
Type=simple
# 指定运行Logstash服务的用户为root
User=root
# 指定运行Logstash服务的用户组为root
Group=root
# 启动Logstash的命令路径和配置文件,配置文件用默认的logstash-sample.conf
ExecStart=/home/ElasticStack/Logstash/logstash-7.17.22/bin/logstash -f /home/ElasticStack/Logstash/logstash-7.17.22/config/logstash-sample.conf
# 总是在失败时重启服务
Restart=always
# 重启间隔为5秒
RestartSec=5
# 设置最大打开文件描述符数为65536
LimitNOFILE=65536
# 停止服务超时时间为无限制
TimeoutStopSec=infinity
# 指定停止信号为SIGTERM
KillSignal=SIGTERM
# 成功退出状态为143
SuccessExitStatus=143

[Install]
# 在多用户环境中启用此服务
WantedBy=multi-user.target

重新加载 systemd 守护进程以应用新的服务文件

sudo systemctl daemon-reload

启动 Logstash 服务并使其在系统启动时自动启动

sudo systemctl start logstash

sudo systemctl enable logstash

到这一步,就完成logstash的安装了。

3.5Elasticsearch 部署

3.5.1下载、解压 Elasticsearch 安装包

#下载Elasticsearch压缩包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.22-linux-x86_64.tar.gz
#解压压缩包
tar -xzf elasticsearch-7.17.22-linux-x86_64.tar.gz

3.5.2配置Elasticsearch

Elasticsearch 单机几乎不需要任何配置即可开始使用,但在为之后扩充成集群必须考虑一些事项

打开 elasticsearch.yml 文件,通常位于 config 目录下:

# 基本设置
#配置 Elasticsearch 监听所有网络接口
network.host: 0.0.0.0
#设置 HTTP 端口为 9200,默认即可
http.port: 9200
#配置集群名称,可以随意命名
cluster.name: elasticsearch-cluster
#配置节点名称,可以随意命名
node.name: elasticsearch-node-1

# 集群设置
#配置集群中的其他节点,用于节点发现
discovery.seed_hosts: ["ip1"]
#配置初始主节点,用于选举主节点
cluster.initial_master_nodes: ["ip1"]

# 节点角色
#设置节点角色为主节点和数据节点,可以根据需要调整单独master或者data
node.roles: ["master", "data"]

# 资源路径
#设置数据存储路径,你自己的路径
path.data: /path/to/data
#设置日志存储路径,你自己的路径
path.logs: /path/to/logs

另外还有一点,默认情况下,Elasticsearch 会根据节点的角色和总内存自动设置 JVM 堆大小。官方也建议在大多数生产环境中使用默认大小。但是一般一台服务器可能服务于多个业务,所以我们还是配置一下内存大小。

网上可能很多文章告诉你直接修改根jvm.options文件,但是官方劝我们了,我觉得我们应该听劝。

我们直接复制一份jvm.options,仅仅留下内存设置部分,设置好相应的大小,然后扔到/jvm.options.d目录下。注意前后不要有空格。

# 内存设置
-Xms2g
-Xmx2g

 3.5.3托管服务并设置开机自启

从命令行运行Elasticsearch

./bin/elasticsearch

 报没报错?报了?看一下是不是下面的错:

六月 15, 2024 2:51:44 下午 sun.util.locale.provider.LocaleProviderAdapter <clinit> WARNING: COMPAT locale provider will be removed in a future release [2024-06-15T14:51:45,138][ERROR][o.e.b.ElasticsearchUncaughtExceptionHandler] [elasticsearch-node-1] uncaught exception in thread [main] org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:173) ~[elasticsearch-7.17.22.jar:7.17.22] at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:160) ~[elasticsearch-7.17.22.jar:7.17.22] at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:77) ~[elasticsearch-7.17.22.jar:7.17.22] at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:112) ~[elasticsearch-cli-7.17.22.jar:7.17.22] at org.elasticsearch.cli.Command.main(Command.java:77) ~[elasticsearch-cli-7.17.22.jar:7.17.22] at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:125) ~[elasticsearch-7.17.22.jar:7.17.22] at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:80) ~[elasticsearch-7.17.22.jar:7.17.22] Caused by: java.lang.RuntimeException: can not run elasticsearch as root at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:107) ~[elasticsearch-7.17.22.jar:7.17.22] at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:183) ~[elasticsearch-7.17.22.jar:7.17.22] at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:434) ~[elasticsearch-7.17.22.jar:7.17.22] at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:169) ~[elasticsearch-7.17.22.jar:7.17.22] ... 6 more uncaught exception in thread [main] java.lang.RuntimeException: can not run elasticsearch as root at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:107) at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:183) at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:434) at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:169) at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:160) at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:77) at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:112) at org.elasticsearch.cli.Command.main(Command.java:77) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:125) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:80) For complete error details, refer to the log at /home/ElasticStack/Elasticsearch/logs/elasticsearch-cluster.log 2024-06-15 06:51:45,535040 UTC [21478] INFO Main.cc@111 Parent process died - ML controller exiting

3.1让你创建的那个专属账号,是不是没切换过去呢?不急,咱们先给文件夹的所有者切换到专属账号上,再把文件描述符限制虚拟内存区域限制给调整一下。

#修改文件夹所有者
chown -R elkc:elkc /home/ElasticStack 

#编辑/etc/security/limits.conf文件,添加或修改
elkc soft nofile 65535
elkc hard nofile 65535

#编辑/etc/sysctl.conf文件,添加或修改
vm.max_map_count=262144
#重新加载
sudo sysctl -p

切换到专属账号启动一下试试,如下图所示,就代表可以了

接下来把Elasticsearch托管给systemd,创建一个新的 systemd 服务单元文件

nano /etc/systemd/system/elasticsearch.service

按照实际情况修改下面的配置,复制进去

[Unit]
# 描述Elasticsearch服务
Description=Elasticsearch
# 提供Elasticsearch文档链接
Documentation=https://www.elastic.co
# 在网络可用时启动
Wants=network-online.target
# 在网络可用后启动
After=network-online.target

[Service]
#我使用本机的JAVA_HOME,这里就需要注释了,其中需要说明的是,你需要JAVA_HOME把添加到系统环境中,不然会使用绑定的JDK启动
# Environment="JAVA_HOME=/home/ElasticStack/Elasticsearch/elasticsearch-7.17.22/jdk"
# Elasticsearch安装目录
Environment="ES_HOME=/home/ElasticStack/Elasticsearch/elasticsearch-7.17.22"
# Elasticsearch数据存储目录
Environment="DATA_DIR=/home/ElasticStack/Elasticsearch/data"
# Elasticsearch日志存储目录
Environment="LOG_DIR=/home/ElasticStack/Elasticsearch/logs"
# Elasticsearch配置文件目录
Environment="CONF_DIR=/home/ElasticStack/Elasticsearch/elasticsearch-7.17.22/config"

# 设置工作目录为Elasticsearch安装目录
WorkingDirectory=/home/ElasticStack/Elasticsearch/elasticsearch-7.17.22
# 指定运行Elasticsearch服务的用户为elkc
User=elkc
# 指定运行Elasticsearch服务的用户组为elkc
Group=elkc
# 启动Elasticsearch的命令路径
ExecStart=/home/ElasticStack/Elasticsearch/elasticsearch-7.17.22/bin/elasticsearch
# 在失败时自动重启服务
Restart=on-failure
# 设置内存锁定限制为无限制
LimitMEMLOCK=infinity
# 设置最大打开文件描述符数为65536
LimitNOFILE=65536
# 设置停止服务的超时时间为0,表示无超时限制
TimeoutStopSec=0
# 指定停止信号为SIGTERM
KillSignal=SIGTERM
# 不发送SIGKILL信号
SendSIGKILL=no

[Install]
# 在多用户环境中启用此服务
WantedBy=multi-user.target

重新加载 systemd 守护进程以应用新的服务文件

sudo systemctl daemon-reload

启动 elasticsearch服务并使其在系统启动时自动启动

sudo systemctl start elasticsearch

sudo systemctl enable elasticsearch

到这一步,就完成elasticsearch的安装了。

3.6Grafana 部署

3.6.1下载安装grafana

#下载grafana安装包
wget https://dl.grafana.com/oss/release/grafana-10.4.0.linux-amd64.tar.gz

#解压安装包
tar -zxvf grafana-10.4.0.linux-amd64.tar.gz

3.6.2托管服务并设置开机自启

把grafana托管给systemd,创建一个新的 systemd 服务单元文件

nano /etc/systemd/system/grafana.service

按照实际情况修改下面的配置,复制进去

[Unit]
# 服务单元描述
Description=Grafana Server
# 在网络目标之后启动
After=network.target

[Service]
# 运行服务的用户
User=root
# 运行服务的用户组
Group=root
# 工作目录
WorkingDirectory=/home/ElasticStack/grafana/grafana-v10.4.0
# 启动命令及配置文件位置
ExecStart=/home/ElasticStack/grafana/grafana-v10.4.0/bin/grafana-server --config=/home/ElasticStack/grafana/grafana-v10.4.0/conf/defaults.ini --homepath=/home/ElasticStack/grafana/grafana-v10.4.0
# 总是重新启动服务
Restart=always

[Install]
# 在多用户环境中启用此服务
WantedBy=multi-user.target

重新加载 systemd 守护进程以应用新的服务文件

sudo systemctl daemon-reload

启动 grafana服务并使其在系统启动时自动启动

sudo systemctl start grafana

sudo systemctl enable grafana

3.6.2打开网站修改一下语言

端口是3000,初始账号和密码均为admin

 到这一步,就完成grafana的安装了。也完成我们这次用到的所有组件的安装。

四、日志收集和处理

接下来我们就要实际应用了。

4.1配置 Filebeat

打开Filebeat.yml

filebeat.inputs:
  - type: log
    enabled: true
    paths:
      - /home/service/logs/A/*.log  #日志路径
    fields:
      log_type: A  #字段标识

  - type: log
    enabled: true
    paths:
      - /home/service/logs/B/*.log  #日志路径
    fields:
      log_type: B #字段标识

output.redis:
  hosts: ["10.12.12.xxx:6369"]
  key: "%{[fields.log_type]}_logs"  # 使用字段值作为 Redis 键名
  datatype: "list"
  db: 0  # Redis 数据库编号,用于存储 Filebeat 发送的日志

4.2配置 Logstash 管道

修改默认的管道配置文件logstash-sample.conf,或者自行新建一个管道配置文件。

# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.

input {
  redis {
    host => "10.12.12.xxx"
    port => 6369
    data_type => "list"
    key => "A_logs"
    codec => json
    threads => 1
    type => "A_logs"  # 自定义类型,用于区分不同来源的日志
  }
  redis {
    host => "10.12.12.xxx"
    port => 6369
    data_type => "list"
    key => "B_logs"
    codec => json
    threads => 1
    type => "B_logs" # 自定义类型,用于区分不同来源的日志
  }
}

output {
  elasticsearch {
    hosts => ["10.12.12.xxx:9200"]
    index => "logstash-%{+YYYY.MM.dd}"
  }
}

4.3在 Elasticsearch 中存储日志

验证日志数据已成功存储在 Elasticsearch 中。

#查询一下索引
curl -XGET "http://10.12.12.xxx:9200/_cat/indices?v" -H "kbn-xsrf: reporting"

 

  • health:索引的健康状态。
  • status:索引的状态。
  • index:索引的名称。
  • uuid:索引的唯一标识符。
  • pri:主分片数量。
  • rep:副本分片数量。
  • docs.count:文档数量。
  • docs.deleted:已删除文档数量。
  • store.size:索引占用的存储空间。
  • pri.store.size:主分片占用的存储空间。

五、数据可视化

5.1Grafana配置可视化

登录到grafana网址,添加 Elasticsearch 数据源

导入 Grafana 仪表板,仪表盘id是17361

效果示例,当然这只是当前模板的的效果,具体你想监控什么则需要你再次基础上修改

至此最基础的流程已经完成,至于对于数据更深层次的清洗、聚合、分析、展示,就需要大家依据自己的需求自行探索了。

若巨浪已淹没了来路,我是帆,亦是舟。

监控 Windows 事件日志并通过 Grafana 展示是一个常见的运维需求,通常需要结合日志收集工具和时间序列数据库来实现。以下是实现 Windows 事件日志监控并集成到 Grafana 的典型设置流程: ### 安装与配置日志收集工具 最常用的日志收集工具是 **Fluentd** 或 **Winlogbeat**(Elastic Stack 的一部分)。Winlogbeat 是专门为 Windows 事件日志设计的轻量级收集器。 1. 下载并安装 Winlogbeat,可以从 [Elastic 官网](https://www.elastic.co/downloads/beats/winlogbeat) 获取最新版本。 2. 编辑 `winlogbeat.yml` 配置文件,指定要监控的事件日志类型,例如: ```yaml winlogbeat.event_logs: - name: Application - name: Security - name: System ``` 3. 配置 Winlogbeat 输出目标,可以是 Elasticsearch、Logstash 或 Kafka 等。若使用 Elasticsearch,配置如下: ```yaml output.elasticsearch: hosts: ["http://localhost:9200"] index: "winlogbeat-%{+yyyy.MM.dd}" ``` ### 配置 Elasticsearch 与 Kibana(可选) 如果使用 Elasticsearch 作为数据存储,确保其已正确安装并运行。Kibana 可用于初步查看日志数据,但用户需求是 Grafana,因此可以跳过 Kibana 的详细配置。 ### 配置 Grafana 1. 安装 Grafana,可以从 [Grafana 官网](https://grafana.com/grafana/download/) 下载并安装。 2. 在 Grafana 中添加 Elasticsearch 作为数据源,输入 Elasticsearch 的地址和索引名称(如 `winlogbeat-*`)。 3. 创建新的 Dashboard 并添加 Panel,选择合适的可视化类型(如表格、柱状图或时间序列图)。 4. 使用 Elasticsearch 查询语句筛选和展示 Windows 事件日志,例如: ```json { "query": { "match": { "event_data.EventID": "4624" } } } ``` ### 高级配置与告警 为了实现更高级的功能,如实时告警,可以结合 **Elasticsearch Watcher** 或 **Grafana 自带的告警功能**。Grafana 支持通过电子邮件、Slack 等方式发送告警通知。 ### 数据优化与存储 对于大规模日志数据,建议对 Elasticsearch 进行调优,包括设置合适的分片数量、索引生命周期管理(ILM)策略等,以提高查询性能并减少存储开销。 ### 示例查询语句 在 Grafana 中,可以使用以下查询语句来筛选特定的 Windows 事件: ```json { "query": { "range": { "@timestamp": { "gte": "now-1h/h", "lt": "now/h" } } } } ``` 通过上述步骤,可以实现对 Windows 事件日志的全面监控,并在 Grafana 中进行可视化展示 [^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值