ELK + filebeat集群部署
一、ELK简介
1. Elasticsearch
Elasticsearch是一个实时的分布式搜索分析引擎, 它能让你以一个之前从未有过的速度和规模,去探索你的数据。它被用作全文检索、结构化搜索、分析以及这三个功能的组合
2.Logstash
Logstash是一款强大的数据处理工具,它可以实现数据传输,格式处理,格式化输出,还有强大的插件功能,常用于日志处理。
3.Kibana
kibana是一个开源和免费的工具,它可以为Logstash和ElasticSearch提供的日志分析友好的Web界面,可以帮助您汇总、分析和搜索重要数据日志。
4.filebeat
Filebeat是用于转发和采集日志数据的轻量级服务。能监视指定的日志文件或位置,收集日志事件,并将它们转发到Logstash或elasticsearch。
如果对于日志不需要进行过滤分析的,可以直接使用filebeat。
如果需要对日志进行过滤分析, 可以使用filebeat+Logstash最合适,如果单独使用Logstash,多台机都需部署Logstash,每台机消耗资源大,filebeat+Logstash相结合,每台机部署filebeat进行数据采集, 一台机部署Logstash作为中心进行接收数据处理以及存储到不同的地方。
5.ELK版本信息为7.1.1,你可以从官网下,也可以直接从下面地址下载:
1 https://artifacts.elastic.co/downloads/logstash/logstash-7.1.1.tar.gz
2 https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.1.1-linux-x86_64.tar.gz
3 https://artifacts.elastic.co/downloads/kibana/kibana-7.1.1-linux-x86_64.tar.gz
官网地址:https://www.elastic.co/cn/downloads/
二、环境准备
1.三台Linux服务器,系统统一
1 [root@ELK1 ~]# cat /etc/redhat-release
2 CentOS Linux release 7.6.1511 (Core)
2.角色划分
node | IP | 节点类型 |
---|---|---|
elk1 | 10.210.13.3 | 数据、主节点(安装elasticsearch、logstash、kabana、filebeat) |
elk2 | 10.210.13.15 | 数据节点(安装elasticsearch、filebeat) |
elk3 | 10.210.13.34 | 数据节点(安装elasticsearch、filebeat) |
3.安装jdk11
这里安装jdk11,如果安装9或者8会报错,具体可看官方文档:
下载安装包
$ wget https://download.java.net/java/GA/jdk11/13/GPL/openjdk-11.0.1_linux-x64_bin.tar.gz
解压到指定目录
$ tar -xzvf jdk-11.0.4_linux-x64_bin.tar.gz -C /usr/local/jdk
4.配置环境变量
1 #vim /etc/profile
2 JAVA_HOME=/usr/local/jdk/jdk-11.0.1
3 CLASSPATH=$JAVA_HOME/lib/
4 PATH=$PATH:$JAVA_HOME/bin
5 export PATH JAVA_HOME CLASSPATH
5.使环境变量生效
$ source /etc/profile
6.查看
$ java -version
三、安装Elasticsearch(简称ES)集群
1.下载及解压
下载
1 $ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.1.1-linux-x86_64.tar.gz
创建目录
2 $ mkdir -p /home/elk
解压
3 $ tar -zvxf elasticsearch-7.1.1-linux-x86_64.tar.gz -C /home/elk
2.创建用户及授权
ElasticSerach要求以非root身份启动,在每个节点创建用户及用户组
1 $ groupadd es
2 $ useradd es -g es
在每个节点上创建数据data和logs目录:
1 $ mkdir -p /data/es/{data,logs}
2 $ chown -R es:es /data/es/
3 $ chown -R es:es /home/elk/elasticsearch-7.1.1
3.修改elasticsearch.yml配置文件
1 $ vim /home/elk/elasticsearch-7.1.1/config/elasticsearch.yml
2 $ path.data: /data/es/data #数据
3 $ path.logs: /data/es/logs #日志
4 $ cluster.name: ELK-cluster # 集群中的名称
5 $ cluster.initial_master_nodes: ["ELK1","ELK2","ELK3"] #主节点
6 $ node.name: ELK1 # 该节点名称,与前面配置hosts保持一致
7 $ node.master: true # 意思是该节点是否可选举为主节点
8 $ node.data: true # 表示这不是数据节点
9 $ network.host: 0.0.0.0 # 监听全部ip,在实际环境中应为一个安全的ip
10 $ http.port: 9200 # es服务的端口号,Http协议主要用于外部通讯
11 $ transport.tcp.port: 9300 # ES集群之间是通过9300进行通讯,Tcp协议jar之间就是通过tcp协议通讯
11 $ http.cors.enabled: true
12 $ http.cors.allow-origin: "*"
13 $ discovery.zen.ping.unicast.hosts: ["10.210.13.3", "10.210.13.15", "10.210.13.34"] # 配置自动发现
14 $ discovery.zen.minimum_master_nodes: 2 #防止集群“脑裂”,需要配置集群最少主节点数目,通常为 (主节点数目/2) + 1
4.修改elasticsearch的JVM内存
elasticesearch在实际生产中非常消耗cpu,需要将初始申请的JVM内存调高,默认是1G,机器内存的一半
1 $ vim /home/elk/elasticsearch-7.1.1/config/jvm.options
2 #修改这两行
-Xms4g #设置最小堆的值为4g
-Xmx4g #设置组大堆的值为4g
5.设置每个进程最大同时打开文件数
1 $ vim/etc/security/limits.conf
2 es hard nofile 65536
3 es soft nofile 65536
4 * soft nproc 4096
5 * hard nproc 4096
6.设置用户拥有的内存权限大小
1 $ vim /etc/sysctl.conf
2 vm.max_map_count=655360
3 $ sysctl -p
7.启动elasticsearch
其它两个节点也类似配置,只需要修改下node.name:即可,在配置好相应的节点后,首先启动主节点,然后在启动相应节点
1 $ su es
Last login: Mon Aug 12 09:58:23 CST 2021 on pts/1
2 $ cd /home/elk/elasticsearch-7.1.1/bin/
3 $ ./elasticsearch -d
查看端口号,分别为9200和9300
1 $ netstat -lntp
8.安装分词插件
1 $ cd /home/elk/elasticsearch-7.1.1/bin/
2 $ elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.1.1/elasticsearch-analysis-ik-7.1.1.zip
四.安装head插件
由于head插件本质上还是一个nodejs的工程,因此需要安装node,使用npm来安装依赖的包。
1.去 https://nodejs.org/en/download/ 下载需要的nodejs 包或者以下地址下载
1 $ cd /home && mkdir elasticsearch-head-master && cd elasticsearch-head-master
2 $ wget https://nodejs.org/dist/latest/node-v15.8.0-linux-x64.tar.xz
3 $ xz -d node-v15.8.0-linux-x64.tar.xz
4 $ tar xvf node-v15.8.0-linux-x64.tar
2.配置并生效
1 $ vi /etc/profile
2 export NODE_HOME=/usr/local/node-v15.8.0-linux-x64
3 export PATH=$PATH:$NODE_HOME/bin
4 $ source /etc/profile
3.查看版本验证
1 $ node -V
2 $ npm -V
注:npm如不行需安装
1 $ cd /home/elasticsearch-head-master
2 $ npm install
可能报错安装以下内容
3 $ npm install phantomjs-prebuilt@2.1.16 --ignore-scripts
4 $ npm install
5 $ npm audit fix
6 $ npm audit fix --force
7 $ npm audit
4.设置软链接
1 $ ln -s /usr/local/node-v15.8.0-linux-x64/bin/npm /usr/local/bin/
2 $ ln -s /usr/local/node-v15.8.0-linux-x64/bin/node /usr/local/bin/
在head目录下安装head所需要的依赖包,使用淘宝的镜像仓库加快安装速度
5.安装淘宝镜像
1 $ npm install -g cnpm --registry=https://registry.npm.taobao.org
6.下载安装head
1 $ https://github.com/mobz/elasticsearch-head
或者
2 $ wget https://github.com/mobz/elasticsearch-head/archive/master.zip
3 $ unzip master.zip
在head目录下执行cnpm install 安装依赖
1 $ cnpm install
启动head插件
1 $ npm start
修改Gruntfile.js文件
1 options:
2 hostname: '',
3 port:9100,
4 base: '',
5 keepalive: true
修改_sit/app.js
1 init: function(parent) {
2 this._super();
3 this.prefs = services.Preferences.instance();
4 this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri")||"http://10.210.13.3:9200";
修改完成后,重新启动es,在head目录,启动head,npm start
7.后面2台主机只需要安装elasticsearch,无需安装head,安装步骤同上
五、安装logstash
1.下载及解压
1 $ wget https://artifacts.elastic.co/downloads/logstash/logstash-7.1.1.tar.gz
2 $ tar -zvxf logstash-7.1.1.tar.gz -C /home/elk
3 $ mkdir -p /data/logstash/{logs,data} #创建数据及日志目录
2.修改logstash配置文件
1 $ vim /home/elk/logstash-7.1.1/config/logstash.yml
2
3 http.host: "ELK1"
4 path.data: /data/logstash/data
5 path.logs: /data/logstash/logs
6 xpack.monitoring.enabled: true #kibana监控插件中启动监控logstash
7 xpack.monitoring.elasticsearch.hosts: ["10.210.13.3:9200","10.210.13.15:9200","10.210.13.34:9200"]
3.创建配置文件
1 $ vim /home/elk/logstash-7.1.1/config/logstash.conf
2
3 input {
4 beats {
5 port => 5044
6 }
7 }
8 output {
9 stdout {
10 codec => rubydebug
11 }
12 elasticsearch {
13 hosts => ["10.210.13.3:9200","10.210.13.15:9200","10.210.13.34:9200"]
14 }
15 }
4.启动服务
1 $ cd /home/elk/logstash-7.1.1/
2 $ nohup bin/logstash -f config/logstash.conf &
六、安装kibana
1.下载及解压
1 $ wget https://artifacts.elastic.co/downloads/kibana/kibana-7.1.1-linux-x86_64.tar.gz
2 $ tar xf kibana-7.1.1-linux-x86_64.tar.gz -C /home/elk
3 $ mkdir -p /data/kibana/logs/
2.修改kibana配置文件
1 $ vim /home/elk/kibana-7.1.1-linux-x86_64/config/kibana.yml
2
3 server.port: 5601 # 配置kibana的端口
4 server.host: 10.210.13.3 # 配置监听ip(设置本地ip使用nginx认证登录)
5 elasticsearch.hosts: ["http://10.210.13.3:9200","http://10.210.13.15:9200","http://10.210.13.34:9200"] # 配置es服务器的ip
6 logging.dest: /data/kibana/logs/kibana.log # 配置kibana的日志文件路径,默认messages
7 i18n.locale: "zh-CN" #配置中文语言
3.启动服务
1 $ cd /home/elk/kibana-7.2.1-linux-x86_64/
2 $ nohup bin/kibana --allow-root &
六、安装filebeat(三台都安装)
1.下载及解压
1 $ wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.1.1-linux-x86_64.tar.gz
2 $ tar -zvxf filebeat-7.1.1-linux-x86_64.tar.gz -C /home/elk/
2.修改filebeat配置文件
1 $ vim /home/elk/filebeat-7.1.1-linux-x86_64/filebeat.yml
2
3 #=========================== Filebeat inputs =============================
4 filebeat.inputs:
5 - type: log
6 enabled: true
7 paths:
8 - /var/log/nginx/access.log
9 fields:
10 document_type: nginx
11
12 #============================= Filebeat modules ===============================
13 filebeat.config.modules:
14 path: ${path.config}/modules.d/*.yml
15 reload.enabled: false
16
17
18 #==================== Elasticsearch template setting ==========================
19 setup.template.settings:
20 index.number_of_shards: 1
21
22 #============================== Kibana =====================================
23 setup.kibana:
24 host: "10.210.13.3:5601"
25
26
27 #----------------------------- Logstash output --------------------------------
28 output.logstash:
29 hosts: ["10.210.13.3:5044"]
30
31 #================================ Processors =====================================
32 processors:
33 - add_host_metadata: ~
34 - add_cloud_metadata: ~
如果需要添加多个日志,只需要添加
1 - type: log
2 enabled: true
3 paths:
4 - /var/log/*.log
3.启动filebeat
1 $ cd /home/elk/filebeat-7.1.1-linux-x86_64/
2 $ nohup ./filebeat -e -c filebeat.yml &
通过tail -f nohup.out 可以看到我们的服务已经启动!