一 实验环境
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
参数并赋值为rubydebug
。codec
(编码器/解码器)在 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中的数据