Linux 运维手册之 Elastic Stack 日志分析系统(ELK)
后知后觉 暂无评论

ELK 并不是一个组件的名称而是三个开源软件的缩写,分别是:ElasticSearch、Logstash、Kibana 。在 5.X 版本后 ELK 平台改名为 Elastic Stack 。

Elastic Stack 官网 内对其描述为 Elastic Stack 让您能够安全可靠地获取任何来源、任何格式的数据,并且能够实时地对数据进行搜索、分析和可视化。

简而言之就是日志数据收集、分析及可视化工具。

集群概念及组件作用

目前常用组件为 Elasticsearsh, Kibana, Logstash, Beats 四大组件。

Kibana

实现数据可视化。

预览 Elastic Stack。Kibana 能够以图表的形式呈现数据,并且具有可扩展的用户界面,供您全方位配置和管理 Elastic Stack。

Elasticsearch

搜索、分析和存储您的数据。

Elasticsearch 是基于 JSON 的分布式搜索和分析引擎,专为实现水平扩展、高可靠性和管理便捷性而设计

Logstash Beats

采集任何来源、任何格式的数据。

Beats 是轻量型采集器的平台,从边缘机器向 Logstash 和 Elasticsearch 发送数据。

Logstash 是动态数据收集管道,拥有可扩展的插件生态系统,能够与 Elasticsearch 产生强大的协同作用。

安装与部署

本文以三台机器为例搭建集群环境

节点号IP主机名
NODE0110.0.0.41elk01
NODE0210.0.0.42elk02
NODE0310.0.0.43elk03

Elasticsearsh

Elastic Stack 的基础组件 Elasticsearsh 需要至少 Java 8 版本,官方推荐至少使用 Oracle JDK 1.8.0_131 版本进行部署。

关于 Java JDK 的部署,文本因篇幅有限不再赘述。详情查看 Oracle 官方文档

为简化步骤,本文提供简易的安装教程(以 Oracle JDK 1.8.0_131 版本为例)

下载 Oracle JDK

wget https://www.wave.md/linux/java/jdk8/jdk-8u131-linux-x64.rpm
wget https://www.wave.md/linux/java/jdk8/jdk-8u131-linux-x64.rpm.md5
小贴士:本文使用自建 FTP 服务器,若对安全性有异议请到官网存档处下载。下载后请对文件进行校验,防止传输过程等可能产生的损坏对后续步骤造成影响。
## 使用命令进行校验,返回 OK 即为一切正常
md5sum -c jdk-8u131-linux-x64.rpm.md5

安装 Oracle JDK

sudo rpm -ivh jdk-8u131-linux-x64.rpm
小贴士:若已经安装了 Java 环境,比如 OpenJDK,请先卸载掉后执行安装。

版本检查

$ java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

配置仓库及安装

创建仓库 repo 文件

sudo vim /etc/yum.repos.d/elasticsearch.repo

写入以下内容

[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

安装

sudo yum makecache
sudo yum install elasticsearch

配置服务

配置服务自启动

sudo systemctl daemon-reload
sudo systemctl enable elasticsearch

补充:因服务器在国外,因此下载速度很慢,可以使用以下命令下载 RPM 包然后离线安装。

sudo yum install --downloadonly --downloaddir=/tmp elasticsearch

在启动服务前需要配置 JVM 堆栈的内存值

sudo vim /etc/elasticsearch/jvm.options

可以看到以下注释和参数

# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space

-Xms1g
-Xmx1g
小贴士:经验法则是一开始使用服务器总内存的一半来配置这两个值,这样剩下的一半内存可以被操作系统用于缓存。以后可以通过监控Elasticsearch的heap使用情况以及根据I/O吞吐量的需求再调整这两个值。

修改配置文件

grep -E '^[a-Z]' /etc/elasticsearch/elasticsearch.yml
## 输出
cluster.name: elk-cluster
node.name: ${HOSTNAME}
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["10.0.0.41", "10.0.0.42", "10.0.0.43"]
discovery.zen.minimum_master_nodes: 2

启动服务

sudo systemctl start elasticsearch

检查服务

Elasticsearsh 服务会占用两个端口 TCP/9200 与 TCP/9300 ,分别为 HTTP 交互端口 及服务间通信端口。

curl -X GET http://localhost:9200

内存锁定开启后无法启动

说明文档:点击跳转
说明文档:内存说明

当你使用 RPM 或者 DEB 包管理安装的时候,默认会使用 systemd ,内存限制会被 systemd 接管,因此开启内存锁定后需要修改启动配置文件。

systemd 服务文件默认存放于 /usr/lib/systemd/system/elasticsearch.service 包含了默认的内存限制配置。

去覆盖默认配置可以新建一个文件,命名为 /etc/systemd/system/elasticsearch.service.d/override.conf ,写入以下内容。

[Service]
LimitMEMLOCK=infinity

修改完后重新加载服务单元

sudo systemctl daemon-reload

elasticsearsh-head 部署

这是一款类监控插件,可以从网页端查看集群状态。

官方地址:点击跳转

docker pull alivv/elasticsearch-head
docker container run --name es-head -p 9100:9100 -dit elivv/elasticsearch-head
sudo yum install nodejs npm openssl screen -y
sudo npm install -g cnpm --registry=https://registry.npm.taobao.org
cd /opt/
sudo git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head/
sudo cnpm install
screen -S es-head
sudo cnpm run start
小贴士:使用此方式部署在前台会输出信息,因此使用 screen 挂起,使用快捷键 Ctrl + A + D 即可挂起当前会话。

修改 Elasticsearch 的配置文件加入以下两行,以支持跨域。

http.cors.enabled: true
http.cors.allow-origin: "*"

检查端口 9100

sudo ss -lntu | grep 9100

网页访问 10.0.0.41:9100 即可看到以下界面:

监控页面(!AVIF)

Kibana

Kibana 安装

Kibana 的安装包在步骤1的源中已经包含,直接安装即可。

sudo yum install kibana

修改配置文件

grep "^[a-Z]" /etc/kibana/kibana.yml
## 输出
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://localhost:9200"
elasticsearch.preserveHost: true
kibana.index: ".kibana"

启动服务

sudo systemctl start kibana

检查服务

sudo lsof -i:5601

Logstash

安装与部署

导入公钥

sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

添加仓库

sudo vim /etc/yum.repos.d/logstash-7.x.repo

写入以下内容

[logstash-7.x]
name=Elastic repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

从仓库安装

sudo yum install logstash

附录

参考连接

本文撰写于一年前,如出现图片失效或有任何问题,请在下方留言。博主看到后将及时修正,谢谢!
禁用 / 当前已拒绝评论,仅可查看「历史评论」。