实验模拟 搭建elk 日志分析系统

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: 实验模拟 搭建elk 日志分析系统

一    实验环境

Node1节点(2C/4G):node1/192.168.217.77                    Elasticsearch  Kibana

Node2节点(2C/4G):node2/192.168.217.88                    Elasticsearch

Apache节点:                apache/192.168.217.99                  Logstash  Apache

 

二    ELK Elasticsearch 集群部署(在Node1、Node2节点上操作)

1,环境准备

关闭防火墙

改主机名

配置域名解析

查看java 环境 (生产环境建议使用jdk

2,  部署 Elasticsearch 软件(node1 node2)

2.1安装es

2.2设置开机自启

2.3修改 elasticsearch主配置文件(先备份)

代码如下:

vim /etc/elasticsearch/elasticsearch.yml
--17--取消注释,指定集群名字
cluster.name: my-elk-cluster
--23--取消注释,指定节点名字:Node1节点为node1,Node2节点为node2
node.name: node1
--33--取消注释,指定数据存放路径
path.data: /data/elk_data
--37--取消注释,指定日志存放路径
path.logs: /var/log/elasticsearch/
--43--取消注释,改为在启动的时候不锁定内存
bootstrap.memory_lock: false
--55--取消注释,设置监听地址,0.0.0.0代表所有地址
network.host: 0.0.0.0
--59--取消注释,ES 服务的默认监听端口为9200
http.port: 9200
--68--取消注释,集群发现通过单播实现,指定要发现的节点 node1、node2
discovery.zen.ping.unicast.hosts: ["node1", "node2"]

没有问题,scp 传给 node2 (注意把node2的配置文件中的节点  改为node2)

2.4   创建数据存放路径并改属主,属组

2.5 启动elasticsearch是否成功开启

有点慢耐心等待一下

2.6  查看节点信息

浏览器访问  http://192.168.217.77:9200  、 http://192.168.217.88:9200 查看节点 Node1、Node2 的信息。

浏览器访问 http://192.168.217.77:9200/_cluster/health?pretty   http://192.168.217.88:9200/_cluster/health?pretty查看群集的健康情况,可以看到 status 值为 green(绿色), 表示节点健康运行。

绿色:健康  数据和副本 全都没有问题

红色:数据都不完整

黄色:数据完整,但副本有问题

3, 安装 Elasticsearch-head 插件(node1)

3.1 为什么要安装 Elasticsearch-head 插件

使用上述方式查看群集的状态对用户并不友好,可以通过安装 Elasticsearch-head 插件,可以更方便地管理群集。

 

3.2 Elasticsearch-head 插件 是什么

Elasticsearch 在 5.0 版本后,Elasticsearch-head 插件需要作为独立服务进行安装,需要使用npm工具(NodeJS的包管理工具)安装。

安装 Elasticsearch-head 需要提前安装好依赖软件 node 和 phantomjs

node:是一个基于 Chrome V8 引擎的 JavaScript 运行环境。

phantomjs:是一个基于 webkit 的JavaScriptAPI,可以理解为一个隐形的浏览器,任何基于 webkit 浏览器做的事情,它都可以做到。

 

3.3 编译安装 node

先安装 编译环境

编译安装node   ./configure    make && make install  (有点慢 等一会)

3.4  安装 phantomjs(前端的框架)

PhantomJS 是一个基于 WebKit 渲染引擎的无头(headless)浏览器,即它是一个没有用户界面(UI)的浏览器环境

先解压 phantomjs 包

将可执行文件拷贝到 /usr/local/bin

3.5 安装 Elasticsearch-head 数据可视化工具

解压Elasticsearch-head

进到这个包里 安装npm install

npm install 是 Node.js 环境中的一个命令,用于安装项目所需的依赖包

在项目根目录下运行此命令时,npm 会做以下两件事之一:

  • 初始化新项目: 如果当前目录下不存在 package.json 文件,npm install 会创建一个新的空 package.json 文件,并将其设置为默认的 npm 初始化配置。这通常意味着生成一个简单的项目描述和初始的空白依赖列表。
  • 安装依赖: 如果当前目录下已存在 package.json 文件,npm install 将读取该文件中定义的 dependencies 和(可选的)devDependencies 字段,然后下载并安装这些依赖包及其子依赖到本地的 node_modules 目录。这个过程也被称为“npm install”。)

3.6  修改 Elasticsearch 主配置文件

跨域问题

由于安全原因,Elasticsearch 默认可能不允许跨域访问。如果您在访问 Elasticsearch Head 时遇到跨域问题,需要在 Elasticsearch 配置文件(通常位于 elasticsearch.yml)中添加以下配置:

vim /etc/elasticsearch/elasticsearch.yml
 
http.cors.enabled: true       #开启跨域访问支持,默认为 false
http.cors.allow-origin: "*"     #指定跨域访问允许的域名地址为所有

systemctl restart elasticsearch

3.7 启动 elasticsearch-head 服务

#必须在解压后的 elasticsearch-head 目录下启动服务,进程会读取该目录下的 gruntfile.js 文件,否则可能启动失败。

查看是否启动

4, 通过 Elasticsearch-head 查看 Elasticsearch 信息

通过浏览器访问 http://192.168.217.77:9100/ 地址并连接群集。如果看到群集健康值为 green 绿色,代表群集很健康。

5,测试Elasticsearch-head 的作用 (插入索引)

通过命令插入一个测试索引,索引为 index-demo,类型为 test。

代码如下;

curl -X PUT 'localhost:9200/index-demo1/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
 
这条 curl 命令的作用是向本地运行的 Elasticsearch 服务的 index-demo1 索引中,使用 PUT 方法更新或创建一个 ID 为 1、类型为 test 的文档。文档内容为一个包含 user 和 mesg 字段的 JSON 对象,并且请求期望接收格式化的 JSON 响应。

浏览器访问 http://192.168.217.77:9100/ 查看索引信息,可以看见索引默认被分片5个,并且有一个副本。

点击“数据浏览”,会发现在node1上创建的索引为 index-demo,类型为 test 的相关信息。

可以看到 索引类型

三      ELK Logstash 部署(在 Apache 节点99机器上操作)

1,Logstash 作用

Logstash 一般部署在需要监控其日志的服务器。在本案例中,Logstash 部署在 Apache 服务器上,用于收集 日志信息并发送到 Elasticsearch。

2,准备环境

改主机名

安装Apahce服务(httpd)

查看java 环境

3, 安装logstash

解压压缩包

做开机自启

做软连接

4,测试 Logstash

Logstash 命令常用选项:

-f:通过这个选项可以指定 Logstash 的配置文件,根据配置文件配置 Logstash 的输入和输出流。

-e:从命令行中获取,输入、输出后面跟着字符串,该字符串可以被当作 Logstash 的配置(如果是空,则默认使用 stdin 作为输入,stdout 作为输出)。

-t:测试配置文件是否正确,然后退出。

4.1  定义输入和输出流(基本测试)

logstash -e 'input { stdin{} } output { stdout{} }' 是一条运行 Logstash 的命令,用于快速搭建一个简单的数据处理管道。以下是对此命令的中文解释:

logstash: 这是命令本身,代表了 Elastic Stack 中用于收集、转换和输出日志和其他事件数据的工具。

-e (或 --config-string): 这是一个命令行选项,用于指定一个简短的 Logstash 配置字符串。这种方式适用于快速测试或临时运行简单的 Logstash 管道,而不必编写完整的配置文件。

'input { stdin{} } output { stdout{} }': 这是传递给 -e 选项的配置字符串,定义了一个基本的 Logstash 数据处理管道,由输入(input)和输出(output)两个阶段组成:

输入阶段 (input { ... }):

  • stdin{}: 表示使用 stdin 输入插件。这个插件从标准输入(通常指键盘输入或管道传输)读取数据。当运行此命令时,您可以直接在终端中输入文本,这些文本将作为 Logstash 处理的数据源。

输出阶段 (output { ... }):

  • stdout{}: 表示使用 stdout 输出插件。这个插件将 Logstash 处理后的数据输出到标准输出(通常指终端屏幕)。在本例中,经过 Logstash 处理的任何数据都会直接显示在终端上。

综上所述,这条命令启动了一个 Logstash 实例,其配置为从标准输入读取数据,经过内部处理(默认情况下,不做任何转换),然后将处理结果输出到标准输出。这是一个最基础的 Logstash 管道示例,常用于快速测试 Logstash 的功能或验证自定义过滤器规则。在实际使用中,Logstash 配置通常会更复杂,包含多个输入源、复杂的过滤规则以及多种输出目的地。

4.2   使用 rubydebug 输出详细格式显示,codec 为一种编解码器

logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'

 

输入阶段 (input { ... }):

  • stdin{}: 与之前相同,表示使用 stdin 输入插件,从标准输入读取数据。

输出阶段 (output { ... }):

  • stdout{ codec=>rubydebug }: 这里仍然使用 stdout 输出插件,但添加了 codec 参数并赋值为 rubydebugcodec(编码器/解码器)在 Logstash 中用于定义数据的序列化和反序列化方式。具体到 rubydebug 编码器,它提供了详细的、易于阅读的输出格式,特别适用于调试。当使用 rubydebug 编码器时,Logstash 输出的数据将包含事件的元数据(如时间戳、事件类型等)以及事件的具体内容,以一种结构清晰、易于理解的方式展示。

综上所述,这条命令启动了一个 Logstash 实例,其配置与之前相似,但输出阶段使用了 rubydebug 编码器。这意味着从标准输入读取的数据在经过 Logstash 处理后,将被格式化为详细且易于阅读的形式输出到标准输出(终端屏幕)。这种配置尤其适用于开发和调试阶段,因为您可以直观地查看每个事件的完整结构和处理细节。在实际生产环境中,可能会选择更适合日志存储或分析需求的输出目的地和编码器,如将数据输出到 Elasticsearch 或使用更紧凑的 JSON 编码格式。

4.3   使用 Logstash 将信息写入 Elasticsearch 中

输入阶段 (input { ... }):

  • stdin{}: 与之前相同,表示使用 stdin 输入插件,从标准输入读取数据。

输出阶段 (output { ... }):

  • elasticsearch { hosts=>["192.168.217.77:9200"] }: 使用 elasticsearch 输出插件,将处理后的数据发送到指定的 Elasticsearch 服务器。这里的配置参数 hosts 指定了目标 Elasticsearch 服务器的地址和端口:
    Code
1hosts => ["192.168.217.77:9200"]
  • 表示 Logstash 将连接到 IP 地址为 192.168.217.77、监听在端口 9200 的 Elasticsearch 实例。Logstash 会将从标准输入读取并处理过的数据作为事件发送到该 Elasticsearch 服务器,存储在相应的索引中。

综上所述,这条命令启动了一个 Logstash 实例,其配置为从标准输入读取数据,经过内部处理(默认情况下,不做任何转换),然后将处理结果发送到 IP 地址为 192.168.217.77、端口为 9200 的 Elasticsearch 服务器。这种配置适用于将数据持久化存储到 Elasticsearch 中,便于后续进行日志搜索、分析和可视化。在实际使用中,可能还需要根据需求配置其他输出参数,如索引名、文档类型(对于旧版本 Elasticsearch)、映射模板等。

 

//结果不在标准输出显示,而是发送至 Elasticsearch 中,可浏览器访问 http://192.168.10.13:9100/ 查看索引信息和数据浏览。

5,定义 logstash配置文件

5.1, logstash配置文件组成

Logstash 配置文件基本由三部分组成:input、output 以及 filter(可选,根据需要选择使用)。

input:表示从数据源采集数据,常见的数据源如Kafka、日志文件等

filter:表示数据处理层,包括对数据进行格式化处理、数据类型转换、数据过滤等,支持正则表达式

output:表示将Logstash收集的数据经由过滤器处理之后输出到Elasticsearch。

5.2 logstash配置文件 语法

#格式如下:

input {...}

filter {...}

output {...}

#在每个部分中,也可以指定多个访问方式。例如,若要指定两个日志来源文件,则格式如下:

input {

   file { path =>"/var/log/messages" type =>"syslog"}

   file { path =>"/var/log/httpd/access.log" type =>"apache"}

}

5.3 修改 Logstash 配置文件

#修改 Logstash 配置文件,让其收集系统日志/var/log/messages,并将其输出到 elasticsearch 中。

首先给httpd 的日志加  可读的权限

写 子配置文件

子配置文件如下:

input {
    file{
        path =>"/var/log/messages"            #指定要收集的日志的位置
        type =>"system"                 #自定义日志类型标识
        start_position =>"beginning"          #表示从开始处收集
    }
}
output {
    elasticsearch {                   #输出到 elasticsearch
        hosts => ["192.168.217.77:9200"]      #指定 elasticsearch 服务器的地址和端口
        index =>"system-%{+YYYY.MM.dd}"         #指定输出到 elasticsearch 的索引格式
    }
}

重启   systemctl restart logstash

浏览器访问 http://192.168.217.77:9100/ 查看索引信息

四     ELK Kiabana 部署(在 Node1 节点上操作)

1,安装kiabana

2, 修改配置文件

代码如下:

vim /etc/kibana/kibana.yml
--2--取消注释,Kiabana 服务的默认监听端口为5601
server.port: 5601
 
--7--取消注释,设置 Kiabana 的监听地址,0.0.0.0代表所有地址
server.host: "0.0.0.0"
 
--21--取消注释,设置和 Elasticsearch 建立连接的地址和端口
elasticsearch.url: "http://192.168.217.77:9200" 
 
--30--取消注释,设置在 elasticsearch 中添加.kibana索引
kibana.index: ".kibana"

3,启动 Kibana 服务

4,验证 Kibana

浏览器访问 http://192.168.217.77:5601

第一次登录需要添加一个 Elasticsearch 索引:

具体方法:

单击 “create” 按钮创建,单击 “Discover” 按钮可查看图表信息及日志信息。

数据展示可以分类显示,在“Available Fields”中的“host”,然后单击 “add”按钮,可以看到按照“host”筛选后的结果

点击创建索引

输入对应的索引,注意要es 机器上有的! kibana 只是显示es机器上有的

查看索引

五    搭建一台完整的elk

即有logstash 搜集httpd的 日志,输出到两台es 机器上,最后通过kiabana 人性化显示

1,在logstash节点(99机器)写子配置文件

目的:将 Apache 服务器的日志(访问的、错误的)添加到 Elasticsearch 并通过 Kibana 显示

代码如下:

input {
    file{
        path => "/etc/httpd/logs/access_log"
        type => "access"
        start_position => "beginning"
    }
    file{
        path => "/etc/httpd/logs/error_log"
        type => "error"
        start_position => "beginning"
    }
}
output {
    if [type] == "access" {
        elasticsearch {
            hosts => ["192.168.217.77:9200"]
            index => "apache_access-%{+YYYY.MM.dd}"
        }
    }
  if [type] == "error" {
        elasticsearch {
            hosts => ["192.168.217.77:9200"]
            index => "apache_error-%{+YYYY.MM.dd}"
        }
    }
}

2,绝对路径启动logstash -f 指定配置文件

/usr/share/logstash/bin/logstash -f apache_log.conf

3,验证elk 框架是否成功

首先浏览器访问 http://192.168.217.77:9100 查看索引是否创建

即es机器上   是否有httpd的日志   logstash是否把日志传给es节点

因为es 节点没有的话,   你kiabana 也看不到

再去浏览器访问 http://192.168.217.77:5601 登录 Kibana,单击“Create Index Pattern”按钮添加索引, 在索引名中输入之前配置的 Output 前缀 apache_access-*,并单击“Create”按钮。在用相同的方法添加 apache_error-*索引。

选择“Discover”选项卡,在中间下拉列表中选择刚添加的 apache_access-* 、apache_error-* 索引, 可以查看相应的图表及日志信息。

 

 

六   总结

1,ELK日志分析系统

一套基于Elasticsearch、Logstash、Kibana三个开源的日志收集、存储、检索和可视化的解决方案

elk可以帮助用户快速定位和分析应用程序的故障,监控应用程序的性能和安全性,以及提供丰富的数据分析和展示功能。

2,Elasticsearch

Elasticsearch 是一个分布式和搜索和分析引擎,它可以对各种类型的数据进行近实时的索引和查询,支持高可用和水平扩展性

3, logstash

logstash:是一个数据处理管道,它可以从多个来源采集数据,对数据进行过滤、转换和增强,然后将数据发送到Easticsearch或者其他的目的地

4,Kibana

Kibana:是一个针对Elasticsearch的数据可视化平台,它可以通过各种图表、仪表盘和地图来展示和探索Elasticsearch中的数据

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
存储 消息中间件 网络协议
日志平台-ELK实操系列(一)
日志平台-ELK实操系列(一)
|
7天前
|
存储 监控 安全
|
4天前
|
存储 Linux Docker
centos系统清理docker日志文件
通过以上方法,可以有效清理和管理CentOS系统中的Docker日志文件,防止日志文件占用过多磁盘空间。选择合适的方法取决于具体的应用场景和需求,可以结合手动清理、logrotate和调整日志驱动等多种方式,确保系统的高效运行。
8 2
|
16天前
|
XML JSON 监控
告别简陋:Java日志系统的最佳实践
【10月更文挑战第19天】 在Java开发中,`System.out.println()` 是最基本的输出方法,但它在实际项目中往往被认为是不专业和不足够的。本文将探讨为什么在现代Java应用中应该避免使用 `System.out.println()`,并介绍几种更先进的日志解决方案。
41 1
|
23天前
|
监控 网络协议 安全
Linux系统日志管理
Linux系统日志管理
38 3
|
29天前
|
监控 应用服务中间件 网络安全
#637481#基于django和neo4j的日志分析系统
#637481#基于django和neo4j的日志分析系统
32 4
|
1月前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控总结
Linux系统命令与网络,磁盘和日志监控总结
52 0
|
1月前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控三
Linux系统命令与网络,磁盘和日志监控三
37 0
|
2月前
|
JSON 缓存 fastjson
一行日志引发的系统异常
本文记录了一行日志引发的系统异常以及作者解决问题的思路。
使用装饰器实现自动化日志系统
使用装饰器实现自动化日志系统