ELK 日志分析系统

avatar
作者
筋斗云
阅读量:0

一、基本概述

1.总体概览

ELK由ElasticSearch、Logstash、Kiabana三个开源工具组成。

  • ElasticSearch :数据存储和搜索
  • Logstash :日志收集和格式化处理
  • Kiabana:对数据进行可视化处理

进行日志处理分析,一般需要经过一下几步:

(1)将日志进行集中化管理

(2)将日志格式化(Logstash)并输出到Elasticsearch

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

(4)前端数据的展示(Kibana)

2.Elasticsearch

Elasticsearch用于数据的存储和搜索,稳定,可靠,快速,较好的水平扩展能力。

Elasticsearch核心概念

(1)接近实时(NRT):速度响应快

(2)集群(cluster):一个或者多个节点产生,通过选举产生,选择奇数台,防止脑裂

  • (3)节点(node):一台单一的服务器,多个节点为一个群集,每个节点都加入Elasticsearch。

  • (4)索引(index):类似于数据库中的“库”(存储数据)

  • (5)类型(type):相当于数据库中表,用于存放具体数据

(6)文档(document):相当于数据库中的记录,基础的信息单元

(7)分片和复制(shards & replicas):Elasticsearch 将索引分为若干份,每份称为一个分片且有独立索引功能。

3.Logstash

logstash开源实现数据的输入(output)——格式处理(filter)——输出(output)

 logstash主要组件:

(1)Shipper:日志收集者,负责监控本地日志文件的变化,及时收集最新的日志文件内容

(2)Indexer:日志存储者,负责接收日志并写入到本地文件

(3)Broker:日志Hub,负责链接多个Shipper和多个Indexer

(4)Search and Storage:允许对时间进行搜索和存储

(5)Web Interface:基于web的展示界面

4.kibanna

kibanna主要用于查看在elasticsear数据以及可视化数据分析。

主要功能:

  • Elasticsearch无缝集成
  • 整合数据
  • 复杂数据分析
  • 让更多的团队成员收益
  • 接口灵活
  • 配置简单
  • 可视化多数据源
  • 简单数据导出

二、实验分析

主机名

ip地址

操作系统

软件包

web01

192.168.10.101

CentOS7.9

httpd

filebeat-7.10.0-linux-x86_64.tar.gz

logstash

192.168.10.102

CentOS7.9

java-11

logstash-7.10.0-linux-x86_64.tar.gz

elk1

192.168.10.103

CentOS7.9

java-11

elasticsearch-7.10.0-linux-x86_64.tar.gz

kibana-7.10.0-linux-x86_64.tar.gz

elasticsearch-head-master.zip

phantomjs-2.1.1-linux-x86_64.tar.bz2

elk2

192.168.10.104

CentOS7.9

java-11

elasticsearch-7.10.0-linux-x86_64.tar.gz

1.设置基本环境

[root@localhost ~]# hostnamectl set-hostname elk1
[root@localhost ~]# bash
 

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
 /etc/selinux/config   


两台ES主机上设置host文件
192.168.10.103 elk1
192.168.10.104 elk2

2.部署ES群集

(1)创建运行用户

[root@elk1 ~]# useradd es

[root@elk1 ~]# passwd es

[root@elk1 ~]# gpasswd -a es wheel

(2)为用户授权

[root@elk1 ~]# visudo

#去掉下面一行前面的注释符号

 %wheel ALL=(ALL)       NOPASSWD: ALL

(3)安装java环境

[root@elk1 ~]# su - es                             -进入es环境

[es@elk1 ~]$ sudo yum -y install java-11         安装java-11版本

[es@elk1 ~]$ java -version                         检查版本

openjdk version "11.0.9.1" 2020-11-04 LTS

OpenJDK Runtime Environment 18.9 (build 11.0.9.1+1-LTS)

OpenJDK 64-Bit Server VM 18.9 (build 11.0.9.1+1-LTS, mixed mode, sharing)

(4)为用户设置资源访问限制

[es@elk1 ~]$ sudo vim /etc/security/limits.conf

es soft nofile 65535       (末尾添加)软限制,一个进程最多打开的文件数量

es hard nofile 65535                            硬限制

es soft nproc 65535                        一个用户最多能创建的进程数

es hard nproc 65535

es soft memlock unlimited                   最大锁定内存地址空间unlimited不限制

es hard memlock unlimited

[es@elk1 bin]$ sudo vi /etc/sysctl.conf

添加下面配置:

vm.max_map_count=655360

备注:

它的默认值是65536

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

虚拟内存区域是一个连续的虚拟地址空间区域。在进程的生命周期中,每当程序尝试在内存中映射文件,链接到共享内存段,或者分配堆空间的时候,这些区域将被创建。

这个参数会影响中间件可以开启的线程数量,如果值过小,有时可能会导致有些中间件无法开启足够的线程,进而报错。

重启系统

[es@elk1 ~]$ sudo reboot

3.部署Elasticsearch软件

(1)在elk1上安装Elasticsearch软件

[root@elk1 ~]# su - es

[es@elk1 ~]$ cd /opt

[es@elk1 opt]$ sudo tar zxvf elasticsearch-7.10.0-linux-x86_64.tar.gz

[root@elk1 opt]$ sudo mv elasticsearch-7.10.0 /etc/elasticsearch

[es@elk1 opt]$ sudo vim /etc/elasticsearch/config/jvm.options

-Xms2g         #23行

-Xmx2g

备注:

JVM(java虚拟机)提供了大量的参数配置,可以通过配置这些参数对JVM进行调优。

Xms
英文解释:Initial heap size(in bytes)
中文释义:堆区初始值
使用方法:-Xms2g 或 -XX:InitialHeapSize=2048m

Xmx
英文解释:Maximum heap size(in bytes)
中文释义:堆区最大值
使用方法:-Xmx2g 或 -XX:MaxHeapSize=2048m

2)更改Elasticsearch主配置文件

[es@elk1 ~]$ sudo vim /etc/elasticsearch/config/elasticsearch.yml

cluster.name: my-application                 ##17行,群集名称

node.name: elk1                             ##23行,本节点主机名

104 则为node.name: elk2

path.data: /path/to/data                ##33行,数据文件路径

path.logs: /path/to/logs                  ##37行,日志文件路径

bootstrap.memory_lock: false                 ##43行,锁定物理内存

network.host: 0.0.0.0                       ##55行,监听地址

http.port: 9200                           ##59行,监听端口

discovery.seed_hosts: ["elk1", "elk2"]                             ##68行,群集中的主机列表

cluster.initial_master_nodes: ["elk1"] ##72,master主机名称,群集的初始化会将此节点选举为master

http.cors.enabled: true          仅在master添加(103)

http.cors.allow-origin: "*"           仅在master添加(103)

注释:
最后两行是增加的参数,这样head插件可以访问es

如果bootstrap.memory_lock这项使用默认配置true,会导致硬盘频繁读,可以配置为false锁定物理内存地址,防止es内存被交换出去,也就是避免es使用swap交换分区,频繁的交换,会导致IOPS(每秒钟输入输出)变高。 

http.cors.enabled 是否支持跨域,默认为false

http.cors.allow-origin 当设置允许跨域,默认为*,表示支持所有域名,如果我们只是允许某些网站能访问,那么可以使用正则表达式。比如只允许本地地址。

(3)创建数据存放路径并授权

[es@elk1 ~]$ sudo mkdir -p /path/to/data

[es@elk1 ~]$ sudo mkdir -p /path/to/logs

[es@elk1 ~]$ sudo chown -R es:es /path/to

[es@elk1 ~]$ sudo chown -R es:es /etc/elasticsearch/

(4)启动es(启动有点慢)

[es@elk2 root]$ /etc/elasticsearch/bin/elasticsearch &

[es@elk1 ~]$ sudo netstat -anpt | grep 9200

tcp6       0      0 :::9200                 :::*                    LISTEN      6987/java   

(5)查看节点信息

 带有星号的是master节点。

4.安装head

在elk1节点上安装部署即可,head 是一个可视化工具

配置好阿里的yum源

[es@elk1 ~]$ sudo yum -y install npm bzip2 nodejs

[es@elk1 opt]$ sudo tar zxvf elasticsearch-head-master.tar.gz

[es@elk1 opt]$ cd elasticsearch-head-master/

[es@elk1 elk1]$ npm config set registry http://registry.npmmirror.com

[es@elk1 elasticsearch-head-master]$ sudo npm install        安装

[es@elk1 elasticsearch-head-master]$ sudo npm run start &         启动
 

[es@elk1 elasticsearch-head-master]$ sudo netstat -anpt | grep 9100
tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN      2027/grunt          
 

 9100端口是elasticsearch-head

5.安装logstash

在102安装logstash

[root@localhost ~]# hostnamectl set-hostname losstash

[root@localhost ~]# bash

[root@losstash ~]# systemctl stop firewalld

[root@losstash ~]# setenforce 0

[root@losstash ~]# yum -y install java-11

[root@losstash ~]# tar zxvf logstash-7.10.0-linux-x86_64.tar.gz

[root@losstash ~]# mv logstash-7.10.0 /etc/logstash

[root@losstash ~]# chmod -R 777 /etc/logstash/data/

将消息输出到屏幕

[root@losstash ~]# /etc/logstash/bin/logstash -e 'input { stdin { } } output { stdout {codec => rubydebug} }'

备注:
input { stdin { } } 标准输入
 output { stdout 标准输出  (屏幕)
Codec   编码解码
 Rubydebug  编码解码技术

将消息输出到es

[root@losstash ~]# /etc/logstash/bin/logstash -e 'input { stdin { } } output { elasticsearch { hosts => ["192.168.10.103:9200"] } stdout { codec => rubydebug }}'

 使用Logstash采集系统日志并输出到elk

[root@logstash log]# cd /var/logmessages

[root@logstash log]# chmod o+r messages
o+r: 属主,属组其他都有读的权限

[root@logstash log]# cd /etc/logstash/config/
[root@logstash config]# vim system.config     (后缀名为.config 即可)

input {

        file {

          path=>"/var/log/messages"

          type=>"system"

          start_position=>"beginning"

             }

      }

output {

        elasticsearch {

          hosts=>["192.168.10.103:9200"]

          index=>"system-%{+YYYY.MM.dd}"

             }

       }

[root@losstash ~]# /etc/logstash/bin/logstash -f /etc/logstash/config/system.conf &

6.安装filebeat

在产生日志的客户端服务器上安装filebeat (在101)

1.安装httpd,模拟日志服务

[root@localhost ~]# hostnamectl set-hostname web01

[root@localhost ~]# bash

[root@web01 ~]# yum -y install httpd

[root@web01 ~]# systemctl start httpd

[root@web01 ~]# echo 'www.benet.com' > /var/www/html/index.html

[root@web01 ~]# curl 192.168.10.101

[root@web01 ~]# cat /var/log/httpd/access_log

[root@web01 ~]# cat /var/log/httpd/error_log

2.安装filebeat

[root@web01~]# tar zxvf filebeat-7.10.0-linux-x86_64.tar.gz

[root@web01 ~]# mv filebeat-7.10.0-linux-x86_64 /etc/filebeat

3.配置web01 (101)filebeat输出

(1)修改filebeat文件,将filebeat输出的日志输入到远程的logstash

[root@web01 ~]# cd /etc/filebeat/

[root@web01 filebeat]# mv filebeat.yml filebeat.yml.bak

[root@web01 filebeat]# vim filebeat.yml

filebeat.inputs:

- type: log

  paths:

    - /var/log/httpd/access_log

output.logstash:

  hosts: ["192.168.10.102:5044"]

(2)启动filebeat服务

[root@web01 ~]# /etc/filebeat/filebeat -c /etc/filebeat/filebeat.yml &

备注:

关闭filebeat

[root@localhost filebeat]# jobs -l

然后杀死对应的进程ID

7.修改logstash配置文件

如果发现logstash属于开启状态,就先关闭掉

可以先查一下logstash的进程,netstat -anpt | grep 5044,再杀死这个进程

如果要把日志提交给ES,可以使用如下内容

[root@logstash ~]# vim /etc/logstash/config/beats.conf

input {

  beats {

    port => "5044"

    codec => "json"

 }

}

output{

       elasticsearch {

          hosts => ["192.168.10.103:9200"]

          index => "weblog-beat-%{+YYYY.MM.dd}"

    }

}

8.运行logstash

/etc/logstash/bin/logstash -f /etc/logstash/config/beats.conf --path.data=/etc/logstash/config.d/web01 &

备注:
如果需要同时运行多个logstash,需要使用不同的路径保存不同的日志数据。--path.data用来指定数据文件路径

访问一下web01的网站,产生一个日志。

测试

 

9.安装kibana 

用es用户身份运行,在elk1上安装Kibana

[es@elk1 opt]$ sudo tar zxvf kibana-7.10.0-linux-x86_64.tar.gz

[es@elk1 opt]$ sudo mv kibana-7.10.0-linux-x86_64 /etc/kibana

[es@elk1 opt]$ sudo chown -R es:es /etc/kibana/

修改Kibana主配置文件

[es@elk1 opt]$ sudo vim /etc/kibana/config/kibana.yml

server.port: 5601                       ##2行,监听端口

server.host: "0.0.0.0"                     ##7行,监听地址

elasticsearch.hosts: "http://192.168.10.103:9200"                     ##28行,ES主机的IP地址

kibana.index: ".kibana"                                        ##32行

i18n.locale: "zh-CN"                             可以修改为中文

启动Kibana服务

[es@elk1 opt]$ /etc/kibana/bin/kibana &

验证Kibana

http://192.168.10.103:5601

 

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!