ELK日志分析系统部署文档

蜜獾互联网

一、ELK说明

ELK是Elasticsearch(ES) + Logstash + Kibana 这三个开源工具组成,官方网站: https://www.elastic.co/products

简单的ELK架构

ES: 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。

Kibana: 可以对 Elasticsearch 进行可视化,还可以在 Elastic Stack 中进行导航,这样便可以进行各种操作了,从跟踪查询负载,到理解请求如何流经您的整个应用,都能轻松完成。

Logstash: 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中。一般用在日志的搜集、分析、过滤,支持大量的数据获取方式。

Filebeat:收集文件数据。

二、基础环境

1. 准备以下几台机器:

主机

服务器角色

主机系统

软件版本

es-node1

Elasticsearch(搜索引擎)

Centos7

Elasticsearch:7.15.5

es-node2

Elasticsearch(搜索引擎)

Centos7

Elasticsearch:7.15.5

es-node3

Elasticsearch(搜索引擎)

Centos7

Elasticsearch:7.15.5

kibana

Kibana(界面展示)

Centos7

Kibana:7.15.5

logstash

Logstash(日志处理)

Centos7

Logstash:7.15.5

filebeat

Filebeat(日志收集)

Centos7

Filebeat:7.15.5

2. 关闭selinux

3.主机之间同步时间

三、Elasticsearch集群部署

3.1 前提准备

3.1.1 安装包下载

https://www.elastic.co/cn/downloads/past-releases#elasticsearch 进行下载相应的产品版本,点击“Download”后选择需要的方式包进行下载,本文以linux 二进制方式进行部署

3.1.2 创建用户及授权(注:每个节点都需要操作)

ElasticSerach要求以非root身份启动,在每个节点创建用户及用户组

groupadd elasticsearch

useradd elasticsearch -g elasticsearch

解压安装包并附所属权

tar -xvzf elasticsearch-7.17.5-linux-x86_64.tar.gz -C /home/elasticsearch


chown -R elasticsearch:elasticsearch /home/elasticsearch/elasticsearch-7.17.5


在每个节点上创建数据data和logs目录:

mkdir -p /data/elasticsearch/{data,logs}

chown -R elasticsearch:elasticsearch /data/elasticsearch


3.1.3 java环境

配置环境变量

## 在/etc/profile 下添加

## set java environment

 

JAVA_HOME=/home/elasticsearch/elasticsearch-7.17.5/jdk

CLASSPATH=$JAVA_HOME/lib/

PATH=$PATH:$JAVA_HOME/bin

export PATH JAVA_HOME CLASSPATH

使环境变量生效并验证

source /etc/profile

java -version

3.1.4 内存不能锁定问题(可选)

## 在配置 ElasticSearch 服务过程中,我们一般要设置 bootstrap.memory_lock 为 true,避免内存数据被交换到 SWAP 分区中。

cat /etc/systemd/system.conf |grep DefaultLimitMEMLOCK

## 需要修改为:

DefaultLimitMEMLOCK=infinity

注:需要重启机器

3.1.5 修改vm.max_map_count


修改一个进程可以拥有的VMA(虚拟内存区域)的数量

vim /etc/sysctl.conf 调整:

vm.max_map_count=262144

执行:sysctl -p 生效



3.2 配置

3.2.1 修改elasticsearch配置文件

配置elasticsearch.yml文件说明:

node.name: node-1 #每个节点不一样

 

#节点是否具有成为主节点的资格

node.master: true

 

#节点是否存储数据

node.data: true

 

#ES 数据保存目录

path.data: /data/elasticsearch/data

 

#ES 日志保存目

path.logs: /data/elasticsearch/logs

 

#服务启动的时候锁定足够的内存,防止数据写入

swapbootstrap.memory_lock: true

 

#监听 

IPnetwork.host: 0.0.0.0

 

#监听端口

http.port: 9200

 

#集群中 node 节点发现列表

discovery.seed_hosts: ["10.10.100.110""10.10.100.111","10.10.100.112"]

 

#集群初始化那些节点可以被选举为 

mastercluster.initial_master_nodes: ["10.10.100.110""10.10.100.111","10.10.100.112"]

 

#一个集群中的 N 个节点启动后,才允许进行数据恢复处理,默认是 1

gateway.recover_after_nodes: 2

 

# 设置是否可以通过正则或者_all 删除或者关闭索引库,默认 true 表示必须需要显式指定索引库名称,生产环境建议设置为 true,删除索引库的时候必须指定,否则可能会误删索引库中的索引库。

action.destructive_requires_name: true

node1节点

grep -Ev "^$|^[#;]"  elasticsearch.yml


node2节点

grep -Ev "^$|^[#;]"  elasticsearch.yml


node3节点

grep -Ev "^$|^[#;]"  elasticsearch.yml


3.2.2 修改JVM内存限制

在vm.options 中调整:

-Xms2g

-Xmx2g #最小和最大内存限制

#官方配置文档最大建议 30G 以内,默认是1G,根据实际情况进行调整

3.2.3 开启跨域访问支持(可选)

在elasticsearch.yml文件中配置一下2个参数:

#开启支持跨域访问

http.cors.enabled: true

#指定允许访问范围

http.cors.allow-origin: "*"


3.3 启动并验证

## 启动:

su - elasticsearch

./elasticsearch-7.17.5/bin/elasticsearch -d


查看监听端口,分别是9200和9300:

netstat -ant|grep 9200

netstat -ant|grep 9300


浏览器访问查看:

查看集群健康状态:http://IP:9200/_cluster/health?pretty


查看集群详细信息:http://IP:9200/_cluster/state?pretty

查看索引列表:http://IP:9200/_cat/indices?v

四、Kibana部署

本文复用ES的一台机器进行部署,实际环境可以单独部署一台。

4.1 前提准备

4.1.1 安装包下载

在https://www.elastic.co/cn/downloads/past-releases#kibana 进行下载相应的软件版本


4.1.2 创建用户及授权

groupadd kibana

useradd kibana -g kibana


4.1.3 解压安装包并附所属权

tar -xzvf kibana-7.17.5-linux-x86_64.tar.gz -C /home/kibana


chown -R kibana:kibana /home/kibana/kibana-7.17.5-linux-x86_64


4.1.4 创建日志目录并附所属权

mkdir -p /data/kibana/logs/

chown -R kibana:kibana /data/kibana


4.2 配置

grep -Ev "^$|^[#;]" kibana.yml


4.3 启动并验证

使用kibana账号启动

4.3.1 启动

su - kibana

./kibana-7.17.5-linux-x86_64/bin/kibana --allow-root > /data/kibana/logs/kibana.log &


停止:

kill -9 `lsof -i :5601 -t`

4.3.2 验证

## 端口验证:

netstat -ant|grep 5601


浏览器验证:http:IP:5601


五、Logstash部署

5.1 准备

5.1.1 安装包下载

通过官网下载链接: https://www.elastic.co/cn/downloads/past-releases#logstash 选择对应的版本


5.1.2 创建数据和日志目录

mkdir -p /data/logstash/{logs,data}


5.2 配置

5.2.1 修改logstash配置文件(可以不修改)

grep -Ev "^$|^[#;]" logstash.yml


5.2.2 创建监控日志的配置文件

Logstash可以直接采集日志文件;本文采用filebeat收集日志,logstash处理日志

input {

beats {

port => 5044

codec => plain{ charset => "GB2312" }

}

}

filter{

grok {

match => { "message" => "%{TIMESTAMP_ISO8601:logdate}" }

}

date {

match => [ "logdate","ISO8601"]

target => "@timestamp"

}

mutate{

remove_field => "logdate"

}

}

output {

elasticsearch {

hosts => ["10.211.55.5:9200"]  # 定义es服务器的ip

index => "emqx-%{+YYYY.MM.dd}" # 定义索引

}

}

grep -Ev "^$|^[#;]" logstash.conf


5.3 启动

## 默认端口:9600,执行命令后需要等一会儿启动成功。

./bin/logstash -f config/logstash.conf &


5.4 验证


六、Filebeat部署

6.1准备

官网下载安装包链接:https://www.elastic.co/cn/downloads/past-releases#filebeat ,选择对应版本


6.2 配置


filebeat安装后,只需要配置好监控的日志。包含input和output 等。

filebeat.inputs:

# 第一个输入

type: log

#是否启用

enabled: true

# 自定义标签

tags: ["qgzhdc-px-data-node"]

# 收集日志的文件路径,可以使用通配附*等

paths:

/home/bagpipes/emqx/log/emqx.log.*

/home/bagpipes/emqx/log/abc.*.txt

encoding: GB2312

# fields 自定义字段与值,这个在检索日志时使用,会给每条日志增加此key与value,能够标识出日志来源。

fields:

ip: 10.211.55.5

# fields_under_root如果为false,则fields下的key会挂到fields下,true的话

fields_under_root: true

multiline:

type: pattern

pattern: '^\d{4}-\d{1,2}-\d{1,2}T\d{1,2}:\d{1,2}:\d{1,2}.\d{6}\+\d{1,2}:\d{1,2}'

negate: true

match: after

output.logstash:

hosts: ["10.211.55.5:5044"]


6.3 启动

## 后台启动:

nohup ./filebeat -e -c filebeat.yml >/dev/null 2>&1 &

6.4 验证

进程启动验证:


七、完整应用验证

首先所有服务都正常启动。

7.1 Filebeat验证

如何通过filebeat数据正常处理完成并输出符合预期的内容,可以采用输出到控制台进行调试验证,在filebeat.yml配置文件中调整输出为控制台方式:


7.2 Logstash验证

如何通过logstash数据正常处理完成并输出符合预期的内容,可以采用输出到控制台进行调试验证,在logstash.conf 配置文件中调整输出为控制台方式:


7.3 ES验证

通过地址api查看是否有相应的索引自动创建并占用存储:http://IP:9200/_cat/indices?v


7.4 Kibana验证

7.4.1 创建索引模版

按照截图中,进入management 中,选择“stack management”



7.4.2 查看索引

点击“Discover”



进入日志查询界面


搜索关键字