ELK 企业级日志分析 ELFK

一 ELK 简介

ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch、Logstash 和 Kiabana 三个开源

工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求。

1 ElasticSearch:

是基于Lucene(一个全文检索引擎的架构)开发的分布式存储检索引擎,用来存储各类日志。

Elasticsearch 是用 Java 开发的,可通过 RESTful Web 接口,让用户可以通过浏览

Elasticsearch 通信。

  • RESTful api
  • GET 获取 文档
  • POST 创建
  • PUT 更新
  • DELTET 删除
  • GET 搜索 值

Elasticsearch是一个实时的、分布式的可扩展的搜索引擎,允许进行全文、结构化搜索,它通常用

于索引和搜索大容量的日志数据,也可用于搜索许多不同类型的文档。

1秒

2 Kiabana:

Kibana 通常与 Elasticsearch 一起部署,Kibana 是 Elasticsearch 的一个功能强大的数

据可视化 Dashboard,Kibana 提供图形化的 web 界面来浏览 Elasticsearch 日志数据,可以用来

汇总、分析和搜索重要数据。

3 Logstash:

作为数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分

析、丰富、统一格式等操作,然后存储到用户指定的位置,一般会发送给 Elasticsearch。

Logstash 由 Ruby 语言编写,运行在 Java 虚拟机(JVM)上,是一款强大的数据处理工具, 可

以实现数据传输、格式处理、格式化输出。

Logstash 具有强大的插件功能,常用于日志处理。

  • 相对 input(数据采集)
  • filter(数据过滤)
  • output(数据输出)

4 可以添加的其它组件:

①Filebeat:

轻量级的开源日志文件数据搜集器。通常在需要采集数据的客户端安装 Filebeat,并指

定目录与日志格式,Filebeat 就能快速收集数据,并发送给 logstash 进或是直接发给

Elasticsearch 存储,性能上相比运行于 JVM 上的 logstash 优势明显,是对它的替代。常应用于

EFLK 架构当中。行解析,

②filebeat 结合 logstash 带来好处:

1)通过 Logstash 具有基于磁盘的自适应缓冲系统,该系统将吸收传入的吞吐量,从而减轻

Elasticsearch 持续写入数据的压力

2)从其他数据源(例如数据库,S3对象存储或消息传递队列)中提取

3)将数据发送到多个目的地,例如S3,HDFS(Hadoop分布式文件系统)或写入文件

4)使用条件数据流逻辑组成更复杂的处理管道

●缓存/消息队列(redis、kafka、RabbitMQ等):

可以对高并发日志数据进行流量削峰和缓冲,这

样的缓冲可以一定程度的保护数据不丢失,还可以对整个架构进行应用解耦。

●Fluentd:是一个流行的开源数据收集器。由于 logstash 太重量级的缺点,Logstash 性能低、资

源消耗比较多等问题,随后就有 Fluentd 的出现。相比较 logstash,Fluentd 更易用、资源消耗更

少、性能更高,在数据处理上更高效可靠,受到企业欢迎,成为 logstash 的一种替代方案,常应

用于 EFK 架构当中。在 Kubernetes 集群中也常使用 EFK 作为日志数据收集的方案。

在 Kubernetes 集群中一般是通过 DaemonSet 来运行 Fluentd,以便它在每个 Kubernetes 工作节

点上都可以运行一个 Pod。 它通过获取容器日志文件、过滤和转换日志数据,然后将数据传递到

Elasticsearch 集群,在该集群中对其进行索引和存储。

5 为什么要使用 ELK:

日志主要包括

  • 系统日志
  • 应用程序日志
  • 安全日志

系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原

因。经常分析日志可以了解服务器的负荷,性

能安全性,从而及时采取措施纠正错误。

往往单台机器的日志我们使用grep、awk等工具就能基本实现简单分析,但是当日志被分散的储存

不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日

志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的

syslog,将所有服务器上的日志收集汇总。集中化管理日志后,日志的统计和检索又成为一件比较

麻烦的事情,一般我们使用 grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的

查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。

一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大

部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系

统,可以提高定位问题的效率。

6 完整日志系统基本特征

收集:能够采集多种来源的日志数据

传输:能够稳定的把日志数据解析过滤并传输到存储系统

存储:存储日志数据

分析:支持 UI 分析

警告:能够提供错误报告,监控机制

7 ELK 的工作原理:

(1)在所有需要收集日志的服务器上部署Logstash;或者先将日志进行集中化管理在日志服务器

上,在日志服务器上部署 Logstash。

(2)Logstash 收集日志,将日志格式化并输出到 Elasticsearch 群集中。

(3)Elasticsearch 对格式化后的数据进行索引和存储。

(4)Kibana 从 ES 群集中查询数据生成图表,并进行前端数据的展示。

总结:logstash作为日志搜集器,从数据源采集数据,并对数据进行过滤,格式化处理,然后交由

Elasticsearch存储,kibana对日志进行可视化处理。

  • input 数据采集
  • output 数据输出
  • filter 数据过滤

三 实操:部署ELK

实验环境

|---------|---------------|----------------------|
| 节点名 | ip地址 | 安装软件 |
| node1 | 192.168.11.6 | elasticsearch、kibana |
| node2 | 192.168.11.12 | elasticsearch |
| apache | 192.168.11.13 | apache、logstash |

3.1 安装elasticsearch
复制代码
[root@node1 ~]# echo "192.168.11.6 note1" >> /etc/hosts
[root@node1 ~]# echo "192.168.11.12 note2" >> /etc/hosts
[root@node1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.11.6 note1
192.168.11.12 note2


[root@node2 ~]# echo "192.168.11.6 note1" >> /etc/hosts
[root@node2 ~]# echo "192.168.11.12 note2" >> /etc/hosts
[root@node2 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.11.6 note1
192.168.11.12 note2


[root@mcb-11-13 ~]# hostnamectl set-hostname apache
[root@mcb-11-13 ~]# bash
[root@apache ~]# 
3.2部署ElasticSearch软件
3.2.1 安装elasticsearch-rpm包

以node1为例

复制代码
[root@node1 ~]# cd /opt
[root@node1 opt]# rz -E
rz waiting to receive.
[root@node1 opt]# rpm -ivh elasticsearch-5.5.0.rpm 
警告:elasticsearch-5.5.0.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID d88e42b4: NOKEY
3.2.2 加载系统服务

以node1为例

复制代码
[root@node1 opt]# systemctl daemon-reload
[root@node1 opt]# systemctl enable elasticsearch.service
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.
3.2.3 修改elasticsearch主配置文件

以node1为例

复制代码
[root@node1 opt]# cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
#备份配置文件
[root@node1 opt]# 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行,取消注释,改为在启动的时候不锁定内存,开启为true
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"]
 
[root@node1 opt]# grep -v "^#" /etc/elasticsearch/elasticsearch.yml
cluster.name: my-elk-cluster
node.name: node1
path.data: /data/elk_data
path.logs: /var/log/elasticsearch/
bootstrap.memory_lock: false
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["node1", "node2"]

3.2.4 创建数据存放路径并授权

以node1为例

复制代码
[root@node1 opt]# vim /etc/elasticsearch/elasticsearch.yml
[root@node1 opt]# grep -v "^#" /etc/elasticsearch/elasticsearch.yml
cluster.name: my-elk-cluster
node.name: node1
path.data: /data/elk_data
path.logs: /var/log/elasticsearch/
bootstrap.memory_lock: false
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["note1", "note2"]
[root@node1 opt]# mkdir -p /data/elk_data
[root@node1 opt]# chown elasticsearch:elasticsearch /data/elk_data
[root@node1 opt]# systemctl start elasticsearch.service 
[root@node1 opt]# netstat -natp | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      7887/java           
[root@node1 opt]# 
查看节点信息

浏览器访问http://192.168.11.6:9200http://192.168.11.12:9200​​​​​​

查看节点node1、node2的信息

浏览器访问http://192.168.11.6:9200/_cluster/health?pretty

http://192.168.11.12:9200/_cluster/health?pretty查看群集的健康情况,可以看到status值为

green(绿色),表示节点健康运行

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

红色:数据都不完整

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

浏览器访问http://192.168.11.6:9200/_cluster/state?pretty http://192.168.11.12:9200/_cluster/state?pretty

检查群集状态信息

3.2-5安装Elasticsearch-head插件

ES在5.0版本后,插件需要作为独立服务进行安装,需要使用npm工具(NodeJS的包管理工具)安装。安装Elasticsarch-head需要提前安装好依赖软件node和phantomjs。

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

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

3.3.1 编译安装node

以node1为例

复制代码
[root@node1 ~]# cd /opt
[root@node1 opt]# rz -E
#上传软件包node-v8.2.1.tar.gz到/opt目录
rz waiting to receive.
[root@node1 opt]# yum install -y gcc gcc-c++ make
[root@node1 opt]# tar zxvf node-v8.2.1.tar.gz 
[root@node1 opt]# cd node-v8.2.1/
[root@node1 node-v8.2.1]# ./configure
[root@node1 node-v8.2.1]# make -j 2 && make install
3.3.2 安装 phantomjs(前端的框架)
复制代码
[root@node1 opt]#ls
elasticsearch-5.5.0.rpm    kibana-5.5.1-x86_64.rpm  node-v8.2.1.tar.gz                    rh
elasticsearch-head.tar.gz  node-v8.2.1              phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@node1 opt]#tar  jxf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/
[root@node1 opt]#cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin/
[root@node1 bin]#ls
phantomjs
[root@node1 bin]#cp phantomjs  /usr/local/bin/
3.3.3 安装 Elasticsearch-head 数据可视化工具
复制代码
[root@node1 opt]# rz -E
rz waiting to receive.
[root@node1 opt]# ls
elasticsearch-5.5.0.rpm    node-v8.2.1.tar.gz
elasticsearch-head.tar.gz  node-v8.2.1.tar.gz.0
kibana-5.5.1-x86_64.rpm    phantomjs-2.1.1-linux-x86_64.tar.bz2
node-v8.2.1                rh           
[root@node1 opt]# tar xf elasticsearch-head.tar.gz -C /usr/local/src/
[root@node1 opt]# cd /usr/local/src/elasticsearch-head/
[root@node1 elasticsearch-head]# ls
Dockerfile                          LICENCE                       README.textile
Dockerfile-alpine                   node_modules                  _site
elasticsearch-head.sublime-project  package.json                  src
Gruntfile.js                        package-lock.json             test
grunt_fileSets.js                   plugin-descriptor.properties
index.html                          proxy
[root@node1 elasticsearch-head]# npm install
npm WARN deprecated [email protected]: The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.0.0 (node_modules/karma/node_modules/chokidar/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm WARN [email protected] license should be a valid SPDX license expression

up to date in 5.538s
3.3.4 修改Elasticsearch主配置文件

以node1为例

复制代码
[root@node1 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml
 
##末行添加以下内容
http.cors.enabled: true			##开启跨域访问支持,默认为false
http.cors.allow-origin: "*"		##指定跨域访问允许的域名地址为所有
 
[root@node1 elasticsearch-head]# systemctl restart elasticsearch.service 
3.3.5 启动elasticsearch-head服务

以node1为例

复制代码
[root@node1 elasticsearch-head]# cd /usr/local/src/elasticsearch-head/
[root@node1 elasticsearch-head]# npm run start &
[1] 53906
[root@node1 elasticsearch-head]# 
> [email protected] start /usr/local/src/elasticsearch-head
> grunt server

Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100

[root@node1 elasticsearch-head]# netstat -natp | grep 9100
通过Elasticsearch-head查看ES信息

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

集很健康。

3.3.7 插入索引
复制代码
通过命令插入一个测试索引,索引为index-demo,类型为test
 
[root@node1 elasticsearch-head]# curl -X PUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
{
  "_index" : "index-demo",
  "_type" : "test",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  },
  "created" : true
}
curl 文字浏览器
-X   发送get请求
PUT  输出
3.3.8 浏览器查看索引信息

浏览器访问http://129.168.11.6:9200查看索引信息,可以看见索引默认被分片为5个,并且有一个

副本。

4 ELK-Logstash部署(在Apache节点上操作)

Logstash一般部署在需要监控其日志的服务器。在本案例中,Logstash部署在Apache服务器上,

用于收集Apache的日志信息并发送到Elasticsearch。

4.1 更改主机名
复制代码
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# hostnamectl set-hostname apache
[root@localhost ~]# su
[root@apache ~]# 
4.2 安装Apache服务(httpd)
复制代码
[root@apache ~]# yum install -y httpd
[root@apache ~]# systemctl start httpd
4.3 安装Java环境
复制代码
[root@apache ~]# yum install -y java
[root@apache ~]# java -version
4.4 安装logstash
复制代码
[root@apache ~]# cd /opt
[root@apache opt]# rz -E
#上传软件包logstash-5.5.1.rpm到/opt目录下
rz waiting to receive.
[root@apache opt]# rpm -ivh logstash-5.5.1.rpm 
[root@apache opt]# systemctl start logstash.service
[root@apache opt]# systemctl enable logstash.service
Created symlink from /etc/systemd/system/multi-user.target.wants/logstash.service to /etc/systemd/system/logstash.service.
[root@apache opt]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
4.5 测试Logstash
4.5.1 Logstash命令常用选项
4.5.2 定义输入和输出流
4.5.2.1 标准输入、输出

输入采用标准输入,输出采用标准输出(类似管道)

复制代码
[root@apache opt]# logstash -e 'input { stdin{} } output { stdout{} }'

[root@apache opt]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin
[root@apache opt]# logstash -e 'input { stdin{} } output { stdin{} }'
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
WARNING: Could not find logstash.yml which is typically located in $LS_HOME/config or /etc/logstash. You can specify the path using --path.settings. Continuing using the defaults
Could not find log4j2 configuration at path //usr/share/logstash/config/log4j2.properties. Using default config which logs to console
15:53:39.390 [main] INFO  logstash.setting.writabledirectory - Creating directory {:setting=>"path.queue", :path=>"/usr/share/logstash/data/queue"}
15:53:39.396 [main] INFO  logstash.setting.writabledirectory - Creating directory {:setting=>"path.dead_letter_queue", :path=>"/usr/share/logstash/data/dead_letter_queue"}
15:53:39.436 [LogStash::Runner] INFO  logstash.agent - No persistent UUID file found. Generating new UUID {:uuid=>"09275bee-6bb0-457f-9618-cf56b49a4a00", :path=>"/usr/share/logstash/data/uuid"}
15:53:39.627 [LogStash::Runner] ERROR logstash.plugins.registry - Problems loading a plugin with {:type=>"output", :name=>"stdin", :path=>"logstash/outputs/stdin", :error_message=>"NameError", :error_class=>NameError, :error_backtrace=>["/usr/share/logstash/logstash-core/lib/logstash/plugins/registry.rb:226:in `namespace_lookup'", "/usr/share/logstash/logstash-core/lib/logstash/plugins/registry.rb:162:in `legacy_lookup'", "/usr/share/logstash/logstash-core/lib/logstash/plugins/registry.rb:138:in `lookup'", "/usr/share/logstash/logstash-core/lib/logstash/plugins/registry.rb:180:in `lookup_pipeline_plugin'", "/usr/share/logstash/logstash-core/lib/logstash/plugin.rb:140:in `lookup'", "/usr/share/logstash/logstash-core/lib/logstash/pipeline.rb:100:in `plugin'", "(eval):12:in `initialize'", "org/jruby/RubyKernel.java:1079:in `eval'", "/usr/share/logstash/logstash-core/lib/logstash/pipeline.rb:72:in `initialize'", "/usr/share/logstash/logstash-core/lib/logstash/pipeline.rb:156:in `initialize'", "/usr/share/logstash/logstash-core/lib/logstash/agent.rb:286:in `create_pipeline'", "/usr/share/logstash/logstash-core/lib/logstash/agent.rb:95:in `register_pipeline'", "/usr/share/logstash/logstash-core/lib/logstash/runner.rb:314:in `execute'", "/usr/share/logstash/vendor/bundle/jruby/1.9/gems/clamp-0.6.5/lib/clamp/command.rb:67:in `run'", "/usr/share/logstash/logstash-core/lib/logstash/runner.rb:209:in `run'", "/usr/share/logstash/vendor/bundle/jruby/1.9/gems/clamp-0.6.5/lib/clamp/command.rb:132:in `run'", "/usr/share/logstash/lib/bootstrap/environment.rb:71:in `(root)'"]}
15:53:39.642 [LogStash::Runner] ERROR logstash.agent - Cannot create pipeline {:reason=>"Couldn't find any output plugin named 'stdin'. Are you sure this is correct? Trying to load the stdin output plugin resulted in this error: Problems loading the requested plugin named stdin of type output. Error: NameError NameError"}
[root@apache opt]# logstash -e 'input { stdin{} } output { stdout{} }'
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
WARNING: Could not find logstash.yml which is typically located in $LS_HOME/config or /etc/logstash. You can specify the path using --path.settings. Continuing using the defaults
Could not find log4j2 configuration at path //usr/share/logstash/config/log4j2.properties. Using default config which logs to console
15:54:40.139 [[main]-pipeline-manager] INFO  logstash.pipeline - Starting pipeline {"id"=>"main", "pipeline.workers"=>16, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>5, "pipeline.max_inflight"=>2000}
15:54:40.502 [[main]-pipeline-manager] INFO  logstash.pipeline - Pipeline main started
The stdin plugin is now waiting for input:
15:54:40.910 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
{:port=>9600}
www.baidu.com
2024-04-11T07:56:46.368Z apache www.baidu.com
4.5.2.2 rubydebug输出

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

复制代码
[root@apache opt]# logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'

[root@apache opt]# logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
WARNING: Could not find logstash.yml which is typically located in $LS_HOME/config or /etc/logstash. You can specify the path using --path.settings. Continuing using the defaults
Could not find log4j2 configuration at path //usr/share/logstash/config/log4j2.properties. Using default config which logs to console
15:59:31.095 [[main]-pipeline-manager] INFO  logstash.pipeline - Starting pipeline {"id"=>"main", "pipeline.workers"=>16, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>5, "pipeline.max_inflight"=>2000}
15:59:31.304 [[main]-pipeline-manager] INFO  logstash.pipeline - Pipeline main started
The stdin plugin is now waiting for input:
15:59:31.393 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com
{
    "@timestamp" => 2024-04-11T08:00:26.600Z,
      "@version" => "1",
          "host" => "apache",
       "message" => "www.baidu.com"
}
4.5.2.3 输出到ES

使用 Logstash 将信息写入 Elasticsearch 中:

复制代码
[root@apache opt]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.11.6:9200"] } }'
4.6 定义logstash配置文件

logstash配置文件基本由三部分组成:input输入、output输出以及filter过滤(可选,根据需要选择使用)。 格式如下:

复制代码
input {...}
output {...}
filter {...}

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

复制代码
input { 
   file { path =>"/var/log/messages" type =>"syslog"} 
   file { path =>"/var/log/httpd/access.log" type =>"apache"} 
}

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

复制代码
[root@apache opt]# chmod +r /var/log/messages
#赋予读的权限,让Logstash可以获取到该文件的内容
[root@apache opt]# vim /etc/logstash/conf.d/system.conf
##该文件需自行创建,文件名可自定义
 
input {
    file{
        path =>"/var/log/messages"
##指定要收集的日志的位置
        type =>"system"
##自定义日志类型标识
        start_position =>"beginning"
##表示从开始处收集
    }
}
output {
    elasticsearch{
##输出到ES
        hosts =>["192.168.11.6:9200", "192.168.11.12:9200"]
##指定ES服务器的地址和端口,为避免单机故障,建议写全
        index =>"system-%{+YYYY.MM.dd}"
##指定输出到ES的索引格式
    }
}
 
[root@apache opt]# systemctl restart logstash.service 
4.7 浏览器访问http://192.168.11.13:9200查看索引信息

5 ELK-Kibana部署(在node1节点上操作)

5.1 安装Kibana
复制代码
[root@node1 elasticsearch-head]# cd /opt
[root@node1 opt]# rz -E
#上传软件包kibana-5.5.1-x86_64.rpm到/opt目录
rz waiting to receive.
[root@node1 opt]# rpm -ivh kibana-5.5.1-x86_64.rpm 
5.2 设置Kibana的主配置文件
复制代码
[root@node1 opt]# cp /etc/kibana/kibana.yml /etc/kibana/kibana.yml.bak
备份配置文件
[root@node1 opt]# vim /etc/kibana/kibana.yml
 
##2行,取消注释,kibana服务的默认监听端口为5601
server.port: 5601
##7行,取消注释,设置kibana的监听地址,0.0.0.0代表所有地址
server.host: "0.0.0.0"
##21行,取消注释,设置和ES建立连接的地址和端口
elasticsearch.url: "http://192.168.11.6:9200"
##30行,取消注释,设置在ES中添加.kibana索引
kibana.index: ".kibana"
5.3 启动kibana服务
复制代码
[root@node1 opt]# systemctl start kibana.service 
[root@node1 opt]# systemctl enable kibana.service 
 
[root@node1 opt]# netstat -natp | grep 5601
5.4 验证kibana

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

5.5 将Apache服务器的日志(访问的、错误的)添加到ES并通过kibana显示

apache服务器

复制代码
[root@apache conf.d]# cd /opt
[root@apache opt]# cd /etc/logstash/conf.d/
[root@apache conf.d]# vim /etc/logstash/conf.d/apache_log.conf
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.11.6:9200"]
            index => "apache_access-%{+YYYY.MM.dd}"
        }
    }
	if [type] == "error" {
        elasticsearch {
            hosts => ["192.168.11.6:9200"]
            index => "apache_error-%{+YYYY.MM.dd}"
        }
    }
}
[root@apache conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf
5.6 浏览器登陆一下192.168.11.13

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

浏览器访问 http://192.168.11.6:5601 登录 Kibana,单击"Create Index Pattern"按钮添加索引, 在

索引名中输入之前配置的 Output 前缀 apache_access-*,并单击"Create"按钮。在用相同的方法

添加 apache_error-*索引。

选择"Discover"选项卡,在中间下拉列表中选择刚添加的 apache_access-* 、apache_error-* 索

引, 可以查看相应的图表及日志信息。

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

ELFK(Filebeat+ELK)

6.1 Filebeat的作用

由于logstash会大量占用系统的内存资源,一般我们会使用filebeat替换logstash收集日志的功能,

组成ELFK架构。 或用fluentd替代logstash组成EFK(elasticsearch/fluentd/kibana),由于fluentd

是由Go语言开发的,一般在K8S环境中使用较多。

6.2 ELFK工作流程

(1)filebeat将日志收集后交由logstash处理

(2)logstash进行过滤、格式化等操作,满足过滤条件的数据将发送给ES

(3)ES对数据进行分片存储,并提供索引功能

(4)kibana对数据进行图形化的web展示,并提供索引接口

6.3环境准备

节点名 ip地址 安装软件

node1 192.168.11.6 elasticsearch kibana

node2 192.168.11.12 elasticsearch

logstash 192.168.11.13 apache、logstash

filebeat 192.168.11.14 filebeat

在ELK的基础上,增加一台filebeat服务器,因此只需再前述ELK部署的前提下进一步操作。

ELK的部署过程

6.4 服务器环境

filebeat节点

复制代码
[root@mcb-11-14 ~]# hostnamectl set-hostname filebeat
[root@mcb-11-14 ~]# su
[root@filebeat ~]# systemctl stop firewalld
[root@filebeat ~]# setenforce 0
6.5 安装filebeat

filebeat节点

复制代码
[root@filebeat ~]# cd /opt
[root@filebeat opt]# ls
rh
[root@filebeat opt]# rz -E
rz waiting to receive.
[root@filebeat opt]# rpm -ivh filebeat-6.6.1-x86_64.rpm 
警告:filebeat-6.6.1-x86_64.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID d88e42b4: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:filebeat-6.6.1-1                 ################################# [100%]
6.6 修改filebeat主配置文件

filebeat节点

6.7 在logstash组件所在节点(apache节点)上新建一个logstash配置文件
复制代码
[root@apache ~]# cd /etc/logstash/conf.d/
[root@apache conf.d]# vim logstash.conf
 
input {
    beats {
        port => "5044"
    }
}
output {
    elasticsearch {
        hosts => ["192.168.11.6:9200", "192.168.11.12:9200"]
        index => "%{[fields][service_name]}-%{+YYYY.MM.dd}"
    }
    stdout {
        codec => rubydebug
    }
}
 
[root@apache conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf 

[root@filebeat opt]# cd /etc/filebeat/   rpm安装就是etc下面
[root@filebeat filebeat]# cp filebeat.yml filebeat.yml.bak
[root@filebeat filebeat]# vim filebeat.yml

[root@filebeat filebeat]#systemctl start filebeat.service 
[root@filebeat filebeat]#systemctl enable filebeat.service 
#如果不设置npm run start & 每次都要开启
[root@filebeat filebeat]#systemctl status filebeat.service
6.8 启动filebeat

如果使用tar包安装使用它启动 /usr/local/filebeat/filebeat -e -c filebeat.yml 或 ./filebeat -e -c filebeat.yml

如果使用rpm包安装使用systemctl start filebeat.service启动filebeat

6.9 启动 logstash
复制代码
[root@logstash conf.d]#ls
apache_log.conf  fb_logstash.conf  system.conf
[root@logstash conf.d]#logstash -f fb_logstash.conf
6.10 浏览器访问 http://192.168.11.6:9100
6.11浏览器访问 http://192.168.10.100:5601 登录 Kibana

单击"Create Index Pattern"按钮添加索引"filebeat-*",单击 "create" 按钮创建,单击 "Discover" 按钮可查看图表信息及日志信息

相关推荐
潘yi.2 天前
ELK1日志分析系统
linux·elk
2401_836836592 天前
ELK日志分析系统
elk
洁✘2 天前
ELK日志分析系统
elk
528302 天前
ELK日志分析系统
elk
谷新龙0013 天前
docker compose搭建elk 8.6.2
elk·docker·容器
遇见火星3 天前
ELK平替OpenSearch+Fluent Bit日志管理系统
elk
QD.Joker5 天前
日志收集工具-logstash
数据库·elk
rit84324996 天前
ELK实现nginx、mysql、http的日志可视化实验
mysql·nginx·elk
学软件的小铃铛8 天前
ELK日志管理框架介绍
elk·系统架构
livemetee8 天前
一个完整的日志收集方案:Elasticsearch + Logstash + Kibana+Filebeat (二)
大数据·elk·搜索引擎