ELK-企业级日志分析系统

  • ELK 简介
  • ELK工作原理(工作流程)
  • ELK Elasticsearch 集群部署
    • 部署 Elasticsearch 软件
    • 在两台node节点上修改增加es 性能调优参数
    • 编译安装 node
    • 安装 phantomjs
    • 安装 Elasticsearch-head 数据可视化工具
    • ELK Logstash 部署(在 Apache 节点上操作)
      • 测试logstash
      • 定义Logstash配置文件
    • ELK Kiabana 部署(在阿帕奇节点上安装)
  • Filebeat+ELK 部署
    • Filebeat+ELK 部署(在node1节点操作)

ELK 简介

ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求。

基本组件

●ElasticSearch:是基于Lucene(一个全文检索引擎的架构)开发的分布式存储检索引擎,用来存储各类日志。
Elasticsearch 是用 Java 开发的,可通过 RESTful Web 接口,让用户可以通过浏览器与 Elasticsearch 通信。
Elasticsearch是一个实时的、分布式的可扩展的搜索引擎,允许进行全文、结构化搜索,它通常用于索引和搜索大容量的日志数据,也可用于搜索许多不同类型的文档。

●Kiabana:Kibana 通常与 Elasticsearch 一起部署,Kibana 是 Elasticsearch 的一个功能强大的数据可视化 Dashboard,Kibana 提供图形化的 web 界面来浏览 Elasticsearch 日志数据,可以用来汇总、分析和搜索重要数据。

●Logstash:作为数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置,一般会发送给 Elasticsearch。
Logstash 由 Ruby 语言编写,运行在 Java 虚拟机(JVM)上,是一款强大的数据处理工具, 可以实现数据传输、格式处理、格式化输出。Logstash 具有强大的插件功能,常用于日志处理。

#可以添加的其它组件:
●Filebeat:轻量级的开源日志文件数据搜集器。通常在需要采集数据的客户端安装 Filebeat,并指定目录与日志格式,Filebeat 就能快速收集数据,并发送给 logstash 进行解析,或是直接发给 Elasticsearch 存储,性能上相比运行于 JVM 上的 logstash 优势明显,是对它的替代。常应用于 EFLK 架构当中。

其他常见组件
Filebeat
开源日志文件数据搜集器,但不能完全替换Logstas的日志分析处理功能,用于EFLK组件
缓存/消息队列(redis、kafka、RabbitMQ)
对高并发日志数据进行流量削峰和缓冲
Fluentd
数据收集器,比Logstash消耗更小,性能更高,用于EFK架构,是Logstash的完全替换,kubernetes常用EFK作为日志数据收集方案

ELK工作原理(工作流程)

(1)在所有需要收集日志的服务器上部署Logstash; 或者先将日志进行集中化管理在日志服务器上, 在日志服务器上部署 Logs tash。
(2)Logstash 收集日志,将日志格式化并输出到 Elasticsearch 群集中。
(3)Elasticsearch 对格式化后的数据进行索引和存储。
(4)Kibana 从 ES 群集中查询数据生成图表,并进行前端数据的展示。

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

为什么要使用 ELK:
日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。
往往单台机器的日志我们使用grep、awk等工具就能基本实现简单分析,但是当日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用 grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。
一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。

完整日志系统基本特征
收集:能够采集多种来源的日志数据
传输:能够稳定的把日志数据解析过滤并传输到存储系统
存储:存储日志数据
分析:支持 UI 分析
警告:能够提供错误报告,监控机制

ELK Elasticsearch 集群部署

node1节点(2C/4G):node1/192.168.30.41 Elasticsearch
node2节点(2C/4G):node2/192.168.30.51 Elasticsearch
Apache节点:apache/192.168.30.21 Logstash Kibana Apache

#更改主机名、配置域名解析、查看Java环境

Node1节点:hostnamectl set-hostname node1
Node2节点:hostnamectl set-hostname node2vim /etc/hosts
192.168.30.41  node1
192.168.30.51  node2

关闭防火墙

systemctl stop firewalld
setenforce 0

设置Java环境

java -version                                        #如果没有安装,yum -y install java
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)

部署 Elasticsearch 软件

(1)安装elasticsearch—rpm包
#上传elasticsearch-6.7.2.rpm到/opt目录下

cd /opt
rpm -ivh elasticsearch-6.7.2.rpm

修改elasticsearch主配置文件

cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
vim /etc/elasticsearch/elasticsearch.yml
--17--取消注释,指定集群名字
cluster.name: my-elk-cluster
--23--取消注释,指定节点名字:Node1节点为node1,Node2节点为node2
node.name: node1
node.master: true       #是否master节点,false为否
node.data: true         #是否数据节点,false为否
--33--取消注释,指定数据存放路径
path.data: /var/lib/elasticsearch
--37--取消注释,指定日志存放路径
path.logs: /var/log/elasticsearch
--43--取消注释,避免es使用swap交换分区
bootstrap.memory_lock: true
--55--取消注释,设置监听地址,0.0.0.0代表所有地址
network.host: 0.0.0.0
--59--取消注释,ES 服务的默认监听端口为9200
http.port: 9200                 #指定es集群提供外部访问的接口
transport.tcp.port: 9300        #指定es集群内部通信接口
--68--取消注释,集群发现通过单播实现,指定要发现的节点
discovery.zen.ping.unicast.hosts: ["192.168.30.41:9300", "192.168.30.51:9300"]

grep -v “^#” /etc/elasticsearch/elasticsearch.yml

配置完之后将配置文件转发给node2节点并修改配置文件中的node.name: node2

scp /etc/elasticsearch/elasticsearch.yml 192.168.30.51:/etc/elasticsearch/

在两台node节点上修改增加es 性能调优参数

#优化最大内存大小和最大文件描述符的数量

vim /etc/security/limits.conf

  • *  soft    nofile          65536
    *  hard    nofile          65536
    *  soft    nproc           32000
    *  hard    nproc           32000
    *  soft    memlock         unlimited
    *  hard    memlock         unlimited
    

同时这里也要修改配置

vim /etc/systemd/system.conf

51 DefaultLimitNOFILE=6553653 DefaultLimitNPROC=3200054 DefaultLimitMEMLOCK=infinity

重启服务器 reboot

sysctl  -a | grep vm.max_map_countvm.max_map_count = 262144   ##说明分配完成大概2个G的内存

开启服务

systemctl start elasticsearch.servicesystemctl enable elasticsearch.service
netstat -natp | grep 9200

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

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

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

编译安装 node

node:是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 phantomjs:是一个基于 webkit 的JavaScriptAPI,可以理解为一个隐形的浏览器,任何基于 webkit 浏览器做的事情,它都可以做到。

在node1上操作

#上传软件包 node-v8.2.1.tar.gz 到/opt

yum install gcc gcc-c++ make -ycd /opt
tar zxvf node-v8.2.1.tar.gzcd node-v8.2.1/
./configure
make && make install

安装 phantomjs

#上传软件包 phantomjs-2.1.1-linux-x86_64.tar.bz2 到

cd /opt
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/
cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin
cp phantomjs /usr/local/bin

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

elasticsearch-head 是用于监控 Elasticsearch 状态的客户端插件,包括数据可视化、执行增删改查操作等。安装 Elasticsearch-head 需要提前安装好依赖软件 node 和 phantomjs。

#上传软件包 elasticsearch-head.tar.gz 到/opt

cd /opt
tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/
cd /usr/local/src/elasticsearch-head/
npm install

修改 Elasticsearch 主配置文件
vim /etc/elasticsearch/elasticsearch.yml

–末尾添加以下内容–

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

systemctl restart elasticsearch

启动 elasticsearch-head 服务
#必须在解压后的 elasticsearch-head 目录下启动服务,进程会读取该目录下的 gruntfile.js 文件,否则可能启动失败。
cd /usr/local/src/elasticsearch-head/
npm run start &> elasticsearch-head@0.0.0 start /usr/local/src/elasticsearch-head
> grunt serverRunning "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100#elasticsearch-head 监听的端口是 9100
netstat -natp |grep 9100通过 Elasticsearch-head 查看 Elasticsearch 信息
通过浏览器访问 http://192.168.30.41:9100/ 地址并连接群集。如果看到群集健康值为 green 绿色,代表群集很健康。![在这里插入图片描述](https://img-blog.csdnimg.cn/615642fc25a442d79442d602a5020fb4.png#pic_center)

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

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
}

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

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

1.更改主机名

hostnamectl set-hostname httpd

2.安装Apahce服务(httpd)

yum -y install httpd
systemctl start httpd

3.安装Java环境

yum -y install java
java -version

4.安装logstash
#上传软件包 logstash-5.5.1.rpm 到/opt目录下

cd /opt
rpm -ivh logstash-5.5.1.rpm
systemctl start logstash.service
systemctl enable logstash.serviceln -s /usr/share/logstash/bin/logstash /usr/local/bin/cd /etc/logstash/conf.d/
/usr/share/logstash/bin/logstash -f apache_log.conf

测试logstash

Logstash 命令常用选项:
-f:通过这个选项可以指定 Logstash 的配置文件,根据配置文件配置 Logstash 的输入和输出流。
-e:从命令行中获取,输入、输出后面跟着字符串,该字符串可以被当作 Logstash 的配置(如果是空,则默认使用 stdin 作为输入,stdout 作为输出)。
-t:测试配置文件是否正确,然后退出。

定义输入和输出流:
#输入采用标准输入,输出采用标准输出(类似管道)

logstash -e 'input { stdin{} } output { stdout{} }'
......
www.baidu.com                               # 键入内容
{                                           # 输出结果"message" => "www.baidu.com","@version" => "1","host" => "www","@timestamp" => 2022-06-16T16:16:31.504Z
}
www.acfun.com
{"message" => "www.acfun.com","@version" => "1","host" => "www","@timestamp" => 2022-06-16T16:16:46.655Z
}//执行 ctrl+c 退出#使用 Logstash 将信息写入 Elasticsearch 中
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.30.41:9200"] } }'输入                输出          对接
......
www.baidu.com                                       #键入内容(标准输入)
www.acfun.com.cn                                    #键入内容(标准输入)
www.google.com                                      #键入内容(标准输入)

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

做测试的时候出现了报错

得到了解决方法

cd /usr/share/logstash/ 到logstash的根目录下创建软链接 ln -s /etc/logstash ./config

再次测试,得到了输出结果

测试二

此时

但这时候出现了问题,数据浏览看不到我所输入的数据

解决方案:

1、进入 es-head 安装目录;
2、cd _site/
3、编辑 vendor.js 共有两处
将 6886行 contentType: "application/x-www-form-urlencoded" 修改为 contentType: "application/json;charset=UTF-8"
然后再将 7574行 var inspectData = s.contentType === "application/x-www-form-urlencoded" && 修改为 var inspectData = s.contentType === "application/json;charset=UTF-8" &&
4、强制刷新浏览器验证。

定义Logstash配置文件

Logstash 配置文件基本由三部分组成:input、output 以及 filter(可选,根据需要选择使用)。
input:表示从数据源采集数据,常见的数据源如Kafka、日志文件等
filter:表示数据处理层,包括对数据进行格式化处理、数据类型转换、数据过滤等,支持正则表达式
output:表示将Logstash收集的数据经由过滤器处理之后输出到Elasticsearch。

#格式如下:
input {...}
filter {...}
output {...}#在每个部分中,也可以指定多个访问方式。例如,若要指定两个日志来源文件,则格式如下:
input {file { path =>"/var/log/messages" type =>"syslog"}file { path =>"/var/log/httpd/access.log" type =>"apache"}
}#修改 Logstash 配置文件,让其收集系统日志/var/log/messages,并将其输出到 elasticsearch 中。
chmod +r /var/log/messages                 #让 Logstash 可以读取日志开始修改配置vim /etc/logstash/conf.d/apache_log.conf```bash
input {file{path =>"/var/log/messages"                        type =>"system"                                   start_position =>"beginning"                  }
}
output {elasticsearch {                                     hosts => ["192.168.30.41:9200","192.168.30.51:9200"]    index =>"system-%{+YYYY.MM.dd}"                  }
}

systemctl restart logstash.service

cd /etc/logstash/conf.d/

logstash -f system.conf #发送

ELK Kiabana 部署(在阿帕奇节点上安装)

1.安装 Kiabana
#上传软件包 kibana-5.5.1-x86_64.rpm 到/opt目录

cd /opt
rpm -ivh kibana-5.5.1-x86_64.rpm

2.设置 Kibana 的主配置文件
vim /etc/kibana/kibana.yml

--2--取消注释,Kiabana 服务的默认监听端口为5601
server.port: 5601
--7--取消注释,设置 Kiabana 的监听地址,0.0.0.0代表所有地址
server.host: "0.0.0.0"
--28--取消注释,配置es服务器的ip,如果是集群则配置该集群中master节点的ip
elasticsearch.url:  ["http://192.168.30.41:9200","http://192.168.30.51:9200"]
--37--取消注释,设置在 elasticsearch 中添加.kibana索引
kibana.index: ".kibana"
--96--取消注释,配置kibana的日志文件路径(需手动创建),不然默认是messages里记录日志
logging.dest: /var/log/kibana.log

3.创建日志文件,启动 Kibana 服务

touch /var/log/kibana.log
chown kibana:kibana /var/log/kibana.log
systemctl start kibana.service
systemctl enable kibana.service

netstat -natp | grep 5601

将网页服务日志(访问的、错误的)添加到 Elasticsearch 并通过 Kibana 显示

cd /etc/logstash/conf.d下logstash -f httpd_log.conf

此时报错

根据异常信息可以看出,是因为已经有另一个使用已配置数据目录的实例。如果希望运行多个实例,则必须更改“path.data”设置。

**原因:**之前运行的instance有缓冲,保存在path.data里面有.lock文件,删除掉就可以

找到安装文件的路径下的data目录,然后 ls -al

删除下面的.lock文件

此时报错消失,发送成功

并且在kibana索引管理里看到了我们的error和access日志

匹配之间创建的索引

创建索引

Filebeat+ELK 部署

在node1上部署filebeat代替Logstash收集日志

Filebeat+ELK 部署(在node1节点操作)

安装 Filebeat

#上传软件包 filebeat-6.7.2-linux-x86_64.tar.gz 到/opt目录

cd /opt
tar zxvf filebeat-6.7.2-linux-x86_64.tar.gz
mv filebeat-6.7.2-linux-x86_64/ /usr/local/filebeat

设置 Filebeat的主配置文件

cd /usr/local/filebeat

vim filebeat.yml

filebeat inputs:- type: log         #指定 log 类型,从日志文件中读取消息enabled: truepaths:- /var/log/messages       #指定监控的日志文件- /var/log/*.logfields:           #可以使用 fields 配置选项设置一些参数字段添加到 output 中service_name: filebeatlog_type: logservice_id: 192.168.80.20--------------Elasticsearch output-------------------
(全部注释掉)----------------Logstash output---------------------
output.logstash:hosts: ["192.168.30.21:5044"]      #指定 logstash 的 IP 和端口

启动 filebeat
./filebeat -e -c filebeat.yml

创建自定义索引

cd /etc/logstash/conf.d

vim logstash.conf

input {beats {port => "5044"}
}
output {elasticsearch {hosts => ["192.168.80.20:9200"]index => "%{[fields][service_name]}-%{+YYYY.MM.dd}"}stdout {codec => rubydebug}
}

#启动 logstash
logstash -f logstash.conf

此时logstash上出现了反馈

同时kibana也看到了自定义索引,我们创建索引对其进行日志分析

ELK-企业级日志分析系统相关推荐

  1. ELK企业级日志分析系统部署

    ELK企业级日志分析系统部署 文章目录 ELK企业级日志分析系统部署 1.什么是ELK日志分析系统 2.ELK日志分析系统诞生的原因 3.ELK日志分析系统的核心开源工具 3.1Logstash解析 ...

  2. ELK 企业级日志分析系统

    文章目录 一. ELK日志分析系统简介 二. 使用ELK的原因 三. 完整日志系统基本特征 四. ELK的工作原理 五.ELK日志分析系统集群部署 5.1 ELK Elasticsearch 集群部署 ...

  3. 企业级日志分析系统ELK(Elasticsearch , Logstash, Kibana)

    企业级日志分析系统ELK(Elasticsearch , Logstash, Kibana) 前言 一.ELK概述 1.ELK日志分析系统 2.ELK日志处理特点 3.Elasticsearch概述 ...

  4. ELK 搭建日志分析系统 + Zipkin服务链路追踪整合

    一.需求描述 在分布式系统中,日志跟踪是一件很令程序员头疼的问题,在遇到生产问题时,如果是多节点需要打开多节点服务器去跟踪问题,如果下游也是多节点且调用多个服务,那就更麻烦,再者,如果没有分布式链路, ...

  5. ELK - 实用日志分析系统

    目前日志分析系统用的越来越广泛,而且最主流的技术即ELK,下面和大家分享一下: ------------------------------------------------------------ ...

  6. ELK+FileBeat日志分析系统

    日志分析系统重新构建了一下,选定的技术方案是ELK,也就是ElasticSearch, LogStash,Kibana.另外加了Filebeat和Kafka 2017.06.28 这两天稍微清闲一些, ...

  7. 基于syslog+logstash+elasticSearch+redis日志分析系统实现

    2019独角兽企业重金招聘Python工程师标准>>> 项目需求:实现企业级日志分析系统 最近项目需求,要实现北京市东城区雪量项目,也算是一个比较大的集成项目,我负责处理十六家招标单 ...

  8. ELK日志分析系统(企业级查看日志系统)

    一. ELK日志分析系统简介 ELK平台是一套完整的日志集中处理解决方案,将ElasticSearch.Logstash 和 Kiabana 三个开源工具配合使用, 完成更强大的用户对日志的查询.排序 ...

  9. elk日志分析系统_部署ELK企业内部日志分析系统

    部署ELK企业内部日志分析系统 一.实验环境 二.基本环境部署 1.IP地址配置 2.主机名配置三台节点hosts文件要一致 [root@yichen-els-node1 ~]# cat /etc/h ...

  10. 十分钟搭建和使用ELK日志分析系统

    十分钟搭建和使用ELK日志分析系统 为满足研发可视化查看测试环境日志的目的,准备采用EK+filebeat实现日志可视化(ElasticSearch+Kibana+Filebeat).题目为" ...

最新文章

  1. 结合丰富示例深入讲解Ajax架构和最佳实践——《深入Ajax:架构与最佳实践》
  2. 每日一皮:爸爸你听我解释...
  3. ORA-01722: invalid number
  4. Redis基础-下载安装配置
  5. IDEA怎么开启终端Terminal
  6. 大火C4D元素,电商大促海报背景BANNER素材
  7. 我打败了妈妈 - 张朔
  8. LCA(最近公共祖先)
  9. 面对疫情,AI 能做什么?
  10. php获取所有url地址_PHP_php 获取完整url地址,主要是获取到地址栏的一些信 - phpStudy...
  11. 程序员必备的七个快捷键【一分钟掌握】
  12. vim编辑器模式及使用方法
  13. 学习C#的一点一滴(20)
  14. iOS获取设备IP地址
  15. windows驱动ddk环境设置
  16. 无线电数字信号处理与软件无线电技术综述[图]
  17. 华为harmonyos官网,HarmonyOS
  18. 通信工程计算机论文,电子通信工程论文范文
  19. NGINX的奇淫技巧 —— 5. NGINX实现金盾防火墙的功能(防CC)
  20. 重装电脑系统Win7并激活、删除其中一个系统、修复电脑 发出尖锐的 嘀嘀嘀嘀嘀 警报生声

热门文章

  1. A Blockchain-Based Nonrepudiation Network Computing Service Scheme for Industrial IoT 阅读笔记
  2. php天猫列表数据抓取,如何翻页抓取网页数据——以采集天猫搜索列表为例
  3. LintCode之玩具工厂
  4. c语言编写闹钟主程序流程图,由89C2051设计的电子钟
  5. 压电式压力传感器工作原理
  6. Flink流计算可视化平台
  7. 【博弈论】极小极大搜索(Minimax Algorithm)与α-β剪枝(Alpha-Beta Pruning)
  8. 用SQL附加数据库文件
  9. 【小卜学编程】Python面试知识点梳理——一些废话以及知识点分类(一)
  10. P1001 A+B Problem