ELK 日志分析系统

目录

一、日志管理方案

二、完整日志系统基本特征

[三、ELK 简介](#三、ELK 简介)

ELK组件:

1、ElasticSearch

2、Logstash

3、Kibana

可以添加的其它组件:

1、Filebeat

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

3、Fluentd

[三、ELK 的工作原理](#三、ELK 的工作原理)

四、ELK部署

1、Elasticsearch部署

①关闭防火墙和安全机制

②设置Java环境

③安装elasticsearch---rpm包

④修改elasticsearch主配置文件

[⑤es 性能调优参数](#⑤es 性能调优参数)

⑥启动elasticsearch是否成功开启

⑦查看节点信息

[2、安装 Elasticsearch-head 插件](#2、安装 Elasticsearch-head 插件)

[①编译安装 node](#①编译安装 node)

[②安装 phantomjs](#②安装 phantomjs)

[③安装 Elasticsearch-head 数据可视化工具](#③安装 Elasticsearch-head 数据可视化工具)

[④修改 Elasticsearch 主配置文件](#④修改 Elasticsearch 主配置文件)

[⑤启动 elasticsearch-head 服务](#⑤启动 elasticsearch-head 服务)

[⑥通过 Elasticsearch-head 查看 Elasticsearch 信息](#⑥通过 Elasticsearch-head 查看 Elasticsearch 信息)

⑦插入索引

[3、 ELK Logstash 部署(在 Nginx 节点上操作)](#3、 ELK Logstash 部署(在 Nginx 节点上操作))

①关闭防火墙和安全机制

②更改主机名

③设置Java环境

④安装nginx服务

⑤安装logstash

[⑥测试 Logstash](#⑥测试 Logstash)

[⑦定义 logstash配置文件,读取nginx日志](#⑦定义 logstash配置文件,读取nginx日志)

[4、ELK Kiabana 部署 Kiabana](#4、ELK Kiabana 部署 Kiabana)

[①安装 Kiabana](#①安装 Kiabana)

[②设置 Kibana 的主配置文件](#②设置 Kibana 的主配置文件)

③创建索引


一、日志管理方案

1、服务器数量较少时

可以直接登录到目标主机查看日志,通过rsyslog工具或编写shell、python脚本实现日志收集,并集中保存到统一的日志服务器

2、服务区数量较多时

使用ELK大型日志系统,实现日志收集、存储、检索和分析

3、容器环境

使用ELK或Loki+Granfana

二、完整日志系统基本特征

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

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

存储:存储日志数据

分析:支持UI分析

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

三、ELK 简介

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

ELK组件:

1、ElasticSearch

是基于Lucene(一个全文检索引擎的架构)开发的分布式存储检索数据库引擎,用来存储各类日志,并创建索引,方便全文检索。集群化部署,节点分三种类型:master/data/client,设置相同的cluster.name并使用Zen Discovery模块通过单播实现集群中节点的服务发现。

2、Logstash

作为数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置,一般会发送给 Elasticsearch。

Logstash 由 Ruby 语言编写,运行在 Java 虚拟机(JVM)上,是一款强大的数据处理工具, 可以实现数据传输、格式处理、格式化输出。Logstash 具有强大的插件功能,常用于日志处理。

3、Kibana

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

可以添加的其它组件:

1、Filebeat

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

filebeat 结合 logstash 带来好处:

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

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

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

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

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

可以对高并发日志数据进行流量削峰和缓冲,这样的缓冲可以一定程度的保护数据不丢失,还可以对整个架构进行应用解耦

3、Fluentd

是一个流行的开源数据收集器。由于 logstash 太重量级的缺点,Logstash 性能低、资源消耗比较多等问题,随后就有 Fluentd 的出现。相比较 logstash,Fluentd 更易用、资源消耗更少、性能更高,在数据处理上更高效可靠,受到企业欢迎,成为 logstash 的一种替代方案,常应用于 EFK 架构当中。在 Kubernetes 集群中也常使用 EFK 作为日志数据收集的方案。

在 Kubernetes 集群中一般是通过 DaemonSet 来运行 Fluentd,以便它在每个 Kubernetes 工作节点上都可以运行一个 Pod。 它通过获取容器日志文件、过滤和转换日志数据,然后将数据传递到 Elasticsearch 集群,在该集群中对其进行索引和存储。

三、ELK 的工作原理

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

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

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

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

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

四、ELK部署

1、Elasticsearch部署

①关闭防火墙和安全机制

systemctl disable --now firewalld

setenforce 0

②设置Java环境

tar xf jdk-8u361-linux-x64.tar.gz

mv jdk1.8.0_361/ /usr/local/

vim /etc/profile.d/java.sh

source /etc/profile.d/java.sh

java -version

③安装elasticsearch---rpm包

上传elasticsearch-6.7.2.rpm到/opt目录下

使用命令rpm -ivh elasticsearch-6.7.2.rpm或yum localinstall elasticsearch-6.7.2.rpm进行安装

④修改elasticsearch主配置文件

vim /etc/elasticsearch/elasticsearch.yml

scp /etc/elasticsearch/elasticsearch.yml 192.168.130.20:`pwd`

scp /etc/elasticsearch/elasticsearch.yml 192.168.130.30:`pwd`

⑤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

优化elasticsearch用户拥有的内存权限

vim /etc/sysctl.conf

在ES内存设置方面,可以遵循以下原则:

1.当机器内存小于64G时,遵循通用的原则,50%给ES,50%留给操作系统,供lucene使用

2.当机器内存大于64G时,遵循原则:建议分配给ES分配 4~32G 的内存即可,其它内存留给操作系统,供lucene使用

一个进程可以拥有的最大内存映射区域数,参考数据(分配 2g/262144,4g/4194304,8g/8388608)

sysctl -p

需重启系统生效配置

reboot

⑥启动elasticsearch是否成功开启

systemctl enable --now elasticsearch.service

⑦查看节点信息

浏览器访问 http://192.168.130.10:9200http://192.168.130.20:9200http://192.168.130.30:9200 查看节点 Node01、Node02 、Node03的信息

2、安装 Elasticsearch-head 插件

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

作用:在web界面实现图形化查看es集群状态,可以在任意一个es节点安装

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

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

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

①编译安装 node

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

yum install gcc gcc-c++ make -y

tar zxvf node-v8.2.1.tar.gz

cd node-v8.2.1/

./configure && make -j2 && make install

②安装 phantomjs

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

cd /opt

tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2

cd /opt/phantomjs-2.1.1-linux-x86_64/bin

cp phantomjs /usr/local/bin

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

上传软件包 elasticsearch-head-master.zip 到/opt

cd /opt

unzip elasticsearch-head-master.zip

cd /opt/elasticsearch-head/

npm install #安装依赖包

④修改 Elasticsearch 主配置文件

vim /etc/elasticsearch/elasticsearch.yml

在末尾添加

http.cors.enabled: true

http.cors.allow-origin: "*"

systemctl restart elasticsearch

⑤启动 elasticsearch-head 服务

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

cd /opt/elasticsearch-head-master/

npm run start &

⑥通过 Elasticsearch-head 查看 Elasticsearch 信息

浏览器访问 http://192.168.130.30:9100/

⑦插入索引

通过命令插入一个测试索引

命令格式:

创建索引

curl -X PUT[|POST] http://IP:9200/\<索引名>[/<类型>/<文档ID>?pretty&pretty] \

[-H 'content-Type: application/json' -d '{"键名1":"键值","键名2":"键值"}']

删除索引

curl -X DELETE http://IP:9200/\<索引名>[,<索引名2>,....]

查看索引配置

curl -X GET http://IP:9200/\<索引名>/_settings

修改索引配置

curl -X PUT http://IP:9200/\<索引名>/_settings \

-H 'content-Type: application/json' -d '{"键名":"键值"}'

创建索引别名

curl -X POST http://IP:9200/_aliases \

-H 'content-Type: application/json' -d '{"actions":[{"add":{"index":"索引名","alias":"索引别名"}}]}'

删除索引别名

curl -X POST http://IP:9200/_aliases \

-H 'content-Type: application/json' -d '{"actions":[{"remove":{"index":"索引名","alias":"索引别名"}}]}'

3、 ELK Logstash 部署(在 Nginx 节点上操作)

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

①关闭防火墙和安全机制

systemctl disable --now firewalld

setenforce 0

②更改主机名

hostnamectl set-hostname nginx

③设置Java环境

tar xf jdk-8u361-linux-x64.tar.gz

mv jdk1.8.0_361/ /usr/local/

vim /etc/profile.d/java.sh

export JAVA_HOME=/usr/local/jdk1.8.0_361

export JRE_HOME=$JAVA_HOME/jre

export CLASSPATH=.:JAVA_HOME/lib:JRE_HOME/lib

export PATH=JAVA_HOME/bin:JRE_HOME/bin:$PATH

source /etc/profile.d/java.sh

java -version

④安装nginx服务

yum -y install epel-release.noarch

yum -y install nginx

systemctl enable --now nginx

⑤安装logstash

上传软件包 logstash-6.7.2.rpm 到/opt目录下

cd /opt

rpm -ivh logstash-6.7.2.rpm

systemctl enable --now logstash.service

ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

⑥测试 Logstash

Logstash 命令常用选项:

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

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

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

-w:指定filter线程数量,默认线程数是5

-l:指定日志文件名称

logstash -e 'input { stdin{} } output { stdout{} }'

logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.130.10:9200"] } }'

⑦定义 logstash配置文件,读取nginx日志

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

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

file beats kafka redis stdin

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

grok 对若干个大文本字段进行再分割成一些小字段 (?<字段名>正则表达式) 字段名: 正则表达式匹配到的内容

date 对数据中的时间格式进行统一和格式化

mutate 对一些无用的字段进行剔除,或增加字段

mutiline 对多行数据进行统一编排,多行合并或拆分

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

elasticsearch stdout

vim /etc/logstash/conf.d/nginx.conf

bash 复制代码
input{
    file {
        path => "/var/log/nginx/access.log"
        type => "nginx_access"
        start_position => "beginning"
        sincedb_path => "/etc/logstash/sincedb_path/log_progress"
        add_field => { "log_hostname" => "${HOSTNAME}" }
    }
    file {
        path => "/var/log/nginx/error.log"
        type => "nginx_error"
        start_position => "beginning"
        sincedb_path => "/etc/logstash/sincedb_path/log_progress"
        add_field => { "log_hostname" => "${HOSTNAME}" }
    }
}

#filter{}

output{
    if [type] == "nginx_access" {
    elasticsearch{
        hosts => ["192.168.130.10:9200","192.168.130.20:9200","192.168.130.30:9200"]
        index => "nginx_access-%{+yyyy.MM.dd}"
        }
    }
    if [type] == "nginx_error" {
    elasticsearch{
        hosts => ["192.168.130.10:9200","192.168.130.20:9200","192.168.130.30:9200"]
        index => "nginx_error-%{+yyyy.MM.dd}"
        }
    }
}

logstash -f nginx.conf #启动logstash

4、ELK Kiabana 部署 Kiabana

Kiabana可以安装在任一节点

①安装 Kiabana

上传软件包 kibana-6.7.2-x86_64.rpm 到/opt目录

cd /opt

rpm -ivh kibana-6.7.2-x86_64.rpm

②设置 Kibana 的主配置文件

vim /etc/kibana/kibana.yml

touch /var/log/kibana.log

chown kibana. /var/log/kibana.log

systemctl enable --now kibana.service

③创建索引

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

相关推荐
Karoku0661 天前
【企业级分布式系统】ELK-企业级日志分析系统
运维·数据库·redis·mysql·elk·缓存
一名技术极客2 天前
徒手从零搭建一套ELK日志平台
elk
jun7788954 天前
SpringBoot整合ELK使用详解
spring boot·后端·elk
yueqingll4 天前
023、ELK 从入门到实践
elk
abandondyy4 天前
ELK Elasticsearch 集群部署
大数据·elk·elasticsearch
小李叭叭叭4 天前
ELK8.15.4搭建开启安全认证
运维·elk·elasticsearch·kibana
光仔December12 天前
【Elasticsearch入门到落地】1、初识Elasticsearch
大数据·elk·elasticsearch·搜索引擎·lucene
太空眼睛13 天前
【EFK】Linux集群部署Elasticsearch最新版本8.x
linux·elk·elasticsearch·efk·master·8.15.3·node.roles
Shenqi Lotus16 天前
ELK-ELK基本概念_ElasticSearch的配置
elk·elasticsearch