Wave Spread...

Linux 运维手册之 Elastic Stack 日志分析系统(ELK)

分类:Linux 评论: 0

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 主机名
NODE01 10.0.0.41 elk01
NODE02 10.0.0.42 elk02
NODE03 10.0.0.43 elk03

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://ftp.wave.red/linux/java/jdk-8u131-linux-x64.rpm
# wget https://ftp.wave.red/linux/java/jdk-8u131-linux-x64.rpm.md5

小贴士:本文使用自建 FTP 服务器,若对安全性有异议请到官网存档处下载。下载后请对文件进行校验,防止传输过程等可能产生的损坏对后续步骤造成影响。

# md5sum jdk-8u131-linux-x64.rpm
9024d13ec651d07de450d465f14065a6  jdk-8u131-linux-x64.rpm
# cat jdk-8u131-linux-x64.rpm.md5 
9024d13ec651d07de450d465f14065a6

安装 Oracle JDK

# 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 文件

# 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

安装

# yum makecache
# yum install elasticsearch

配置服务

配置服务自启动

# sudo systemctl daemon-reload
# sudo systemctl enable elasticsearch

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

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

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

# vi /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

启动服务

# 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 run --name es-head -p 9100:9100 -dit elivv/elasticsearch-head
# yum install nodejs npm openssl screen -y
# npm install -g cnpm --registry=https://registry.npm.taobao.org
# cd /opt/
# git clone git://github.com/mobz/elasticsearch-head.git
# cd elasticsearch-head/
# cnpm install
# screen -S es-head
# cnpm run start

小贴士:使用此方式部署在前台会输出信息,因此使用 screen 挂起,使用快捷键 Ctrl + A + D 即可挂起当前会话。

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

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

检查端口 9100

# ss -lntp | grep 9100
LISTEN     0      128          *:9100                     *:*                   users:(("grunt",pid=7023,fd=12))

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

Kibana

Kibana 安装

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

# 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"

启动服务

# systemctl start kibana

检查服务

# lsof -i:5601
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
node    2499 kibana   10u  IPv4  22587      0t0  TCP *:esmagent (LISTEN)

Logstash

安装与部署

回复