IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> dockercompose搭建elk -> 正文阅读

[大数据]dockercompose搭建elk

Elastic Stack简介

如果你没有听说过Elastic Stack,那你一定听说过ELK,实际上ELK是三款软件的简称,分别是Elasticsearch、 Logstash、Kibana组成,在发展的过程中,又有新成员Beats的加入,所以就形成了Elastic Stack。所以说,ELK是旧的称呼,Elastic Stack是新的名字。

image-20200922092403279

全系的Elastic Stack技术栈包括:

image-20200922092505011

Elasticsearch

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

我们建立一个网站或应用程序,并要添加搜索功能,但是想要完成搜索工作的创建是非常困难的。我们希望搜索解决方案要运行速度快,我们希望能有一个零配置和一个完全免费的搜索模式,我们希望能够简单地使用JSON通过HTTP来索引数据,我们希望我们的搜索服务器始终可用,我们希望能够从一台开始并扩展到数百台,我们要实时搜索,我们要简单的多租户,我们希望建立一个云的解决方案。因此我们利用Elasticsearch来解决所有这些问题及可能出现的更多其它问题。

ElasticSearch是Elastic Stack的核心,同时Elasticsearch 是一个分布式、RESTful风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。作为Elastic Stack的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。

Elasticsearch的发展是非常快速的,所以在ES5.0之前,ELK的各个版本都不统一,出现了版本号混乱的状态,所以从5.0开始,所有Elastic Stack中的项目全部统一版本号。(elk版本号必须要统一)

Kibana

Kibana 是一款开源的数据分析和可视化平台,它是 Elastic Stack 成员之一,设计用于和 Elasticsearch 协作。您可以使用 Kibana 对 Elasticsearch 索引中的数据进行搜索、查看、交互操作。您可以很方便的利用图表、表格及地图对数据进行多元化的分析和呈现。

官网:https://www.elastic.co/cn/kibana

image-20200924193926486

Beats

Beats是elastic公司开源的一款采集系统监控数据的代理agent,是在被监控服务器上以客户端形式运行的数据收集器的统称,可以直接把数据发送给Elasticsearch或者通过Logstash发送给Elasticsearch,然后进行后续的数据分析活动。Beats由如下组成:

  • Packetbeat:是一个网络数据包分析器,用于监控、收集网络流量信息,Packetbeat嗅探服务器之间的流量,解析应用层协议,并关联到消息的处理,其支 持ICMP (v4 and v6)、DNS、HTTP、Mysql、PostgreSQL、Redis、MongoDB、Memcache等协议;
  • Filebeat:用于监控、收集服务器日志文件,其已取代 logstash forwarder;
  • Metricbeat:可定期获取外部系统的监控指标信息,其可以监控、收集 Apache、HAProxy、MongoDB MySQL、Nginx、PostgreSQL、Redis、System、Zookeeper等服务;

Beats和Logstash其实都可以进行数据的采集,但是目前主流的是使用Beats进行数据采集,然后使用 Logstash进行数据的分割处理等,早期没有Beats的时候,使用的就是Logstash进行数据的采集。

Beats平台其实是一个轻量性数据采集器,通过集合多种单一用途的采集器,从成百上千台机器中向Logstash或ElasticSearch中发送数据。

image-20200924091716757

通过Beats包含以下的数据采集功能

  • Filebeat:采集日志文件
  • Metricbeat:采集指标
  • Packetbeat:采集网络数据

image-20200924092015934

如果我们的数据不需要任何处理,那么就可以直接发送到ElasticSearch中

如果们的数据需要经过一些处理的话,那么就可以发送到Logstash中,然后处理完成后,在发送到ElasticSearch

最后在通过Kibana对我们的数据进行一系列的可视化展示

image-20200924092348121

Filebeat

介绍

Filebeat是一个轻量级的日志采集器

image-20200924092551044

为什么要用Filebeat?

当你面对成百上千、甚至成千上万的服务器、虚拟机和溶气气生成的日志时,请告别SSH吧!Filebeat将为你提供一种轻量型方法,用于转发和汇总日志与文件,让简单的事情不再繁华,关于Filebeat的记住以下两点:

  • 轻量级日志采集器
  • 输送至ElasticSearch或者Logstash,在Kibana中实现可视化

架构

用于监控、收集服务器日志文件.

image-20200924092749077

流程如下:

  • 首先是input输入,我们可以指定多个数据输入源,然后通过通配符进行日志文件的匹配
  • 匹配到日志后,就会使用Harvester(收割机),将日志源源不断的读取到来
  • 然后收割机收割到的日志,就传递到Spooler(卷轴),然后卷轴就在将他们传到对应的地方

Logstash

Logstash是一个开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到最喜欢的存储库中(我们的存储库当然是ElasticSearch)

image-20200924213006328

我们回到我们ElasticStack的架构图,可以看到Logstash是充当数据处理的需求的,当我们的数据需要处理的时候,会将它发送到Logstash进行处理,否则直接送到ElasticSearch中

Logstash可以处理各种各样的输入,从文档,图表中=,数据库中,然后处理完后,发送到

image-20200924213350345

Logstash主要是将数据源的数据进行一行一行的处理,同时还直接过滤切割等功能。

image-20200924214152859

部署安装

要准备的:

1、2核4g或以上的服务器

2、docker

3、docker-compose

1、安装docker

首先到docker官网查看文档(docker的安装需要centos7.x以上):https://docs.docker.com/engine/install/centos/

1、卸载旧版本的docker

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2、设置镜像仓库

 sudo yum install -y yum-utils
 sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
    
    # 换成国内阿里云的docker仓库
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

3、安装docker引擎

sudo yum install docker-ce docker-ce-cli containerd.io

4、docker版本检查

docker version

#启动docker
service docker start

# 设置开机自启动
systemctl enable docker

2、安装docker-compose

找到官网地址:https://docs.docker.com/compose/install/

1、安装

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

2、授权

sudo chmod +x /usr/local/bin/docker-compose

3、准备镜像

docker pull logstash:7.9.3
docker pull kibana:7.9.3
docker pull elasticsearch:7.9.3
docker pull elastic/filebeat:7.9.3

4、搭建efk(注意文件挂载的位置)

1、docker-compose.yml

version: "3.9"
services:
  elasticsearch:
    image: elasticsearch:7.9.3
    restart: always
    container_name: elasticsearch
    ports:
      - 9200:9200
      - 9300:9300
    environment:
      - discovery.type=single-node
      - ES_JAVA_OPTS=-Xms64m -Xmx128m
    volumes:
      - ./elasticsearch/data:/usr/share/elasticsearch/data
      - ./elasticsearch/download:/usr/share/elasticsearch/download

  kibana:
    image: kibana:7.9.3
    restart: always
    container_name: kibana
    ports:
      - 5601:5601
    environment:
      - elasticsearch_url=elasricsearch:9200
    depends_on:
      - elasticsearch

  filebeat:
    image: elastic/filebeat:7.9.3
    restart: always
    container_name: filebeat
    volumes:
      - ./filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml
      - ./filebeat/logs:/var/log/filebeat/logs
    depends_on:
      - elasticsearch
      - kibana

需要注意的地方:

1、es设置成单节点模式

2、设置es的占用内存

3、 容器卷挂载:
	1)是方便在容器外面编辑容器配置文件,还有比如es安装ik分词插件什么的
	2)可以防止删除容器之后所有数据就没有(持久化)
	
	
4、容器间内部通讯:
    1)docker-compose 默认会创建一个桥接模式的网络 ,这些容器间可以直接通过服务(service)名字建立通讯,而不用写ip地址
    2)docker network ls 查看 网络  
    3)docker network inspect 网络名字查看网络配置
    

2、filebeat.yml

filebeat:
  inputs:
    - type: log
      enabled: true
      paths:
        - /var/log/filebeat/logs/*.log

setup:
  ilm:
    enabled: false

  template:
    settings:
      index:
        number_of_shards: 1
        number_of_replicas: 0
    name: "filebeat"
    pattern: "filebeat-*"
  kibana:
    host: "kibana:5601"

output:
#  logstash:
#    hosts: ["logstash:5044"]
  elasticsearch:
    hosts: ["elasticsearch:9200"]
    index: "filebeat-%{+yyyy.MM.dd}"


docker-compose命令:

#启动服务
docker-compose up -d 
#启动并编译
docker-compose up -d --build
#停止并删除容器
docker-compose down
#查看容器日志
docker-compose logs 
docker logs 容器id

5、搭建elk

流程说明

image-20200925083514711

  • 应用APP生产日志,用来记录用户的操作
    • [INFO] 2019-03-15 22:55:20 [Main] - DAU|5206|使用优惠券|2019-03-15 03:37:20
    • [INFO] 2019-03-15 22:55:21 [Main] - DAU|3880|浏览页面|2019-03-15 07:25:09
  • 通过Filebeat读取日志文件中的内容,并且将内容发送给Logstash,原因是需要对内容做处理
  • Logstash接收到内容后,进行处理,如分割操作,然后将内容发送到Elasticsearch中
  • Kibana会读取Elasticsearch中的数据,并且在Kibana中进行设计Dashboard,最后进行展示

1、docker-compose.yml

version: "3.9"
services:
  elasticsearch:
    image: elasticsearch:7.9.3
    restart: always
    container_name: elasticsearch
    ports:
      - 9200:9200
      - 9300:9300
    environment:
      - discovery.type=single-node
      - ES_JAVA_OPTS=-Xms64m -Xmx128m
    volumes:
      - ./elasticsearch/data:/usr/share/elasticsearch/data
      - ./elasticsearch/download:/usr/share/elasticsearch/download

  kibana:
    image: kibana:7.9.3
    restart: always
    container_name: kibana
    ports:
      - 5601:5601
    environment:
      - elasticsearch_url=elasricsearch:9200
    depends_on:
      - elasticsearch

  filebeat:
    image: elastic/filebeat:7.9.3
    restart: always
    container_name: filebeat
    volumes:
      - ./filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml
      - ./filebeat/logs:/var/log/filebeat/logs
    depends_on:
      - elasticsearch
      - kibana
      
  logstash:
    image: logstash:7.9.3
    restart: always
    container_name: logstash
    volumes:
      - ./logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf
      - ./logstash/template.json:/etc/logstash/template.json
    ports:
      - "5044:5044"
      - "9600:9600"
    environment:
      LS_JAVA_OPTS: "-Xms512m -Xmx512m"
    depends_on:
      - elasticsearch

2、filebeat.yml

filebeat:
  inputs:
    - type: log
      enabled: true
      paths:
        - /var/log/filebeat/logs/*.log

setup:
  ilm:
    enabled: false

  template:
    settings:
      index:
        number_of_shards: 1
        number_of_replicas: 0
    name: "filebeat"
    pattern: "filebeat-*"
  kibana:
    host: "kibana:5601"

output:
  logstash:
    hosts: ["logstash:5044"]
#  elasticsearch:
#    hosts: ["elasticsearch:9200"]
#    index: "filebeat-%{+yyyy.MM.dd}"

3、logstash.conf

input {
    beats {
       port => 5044
    }
}

filter {
    grok {
        pattern_definitions => {
            "QUALIFIED" => "[a-zA-Z0-9$_.]+"
        }

        match => {
            "message" => "%{TIMESTAMP_ISO8601:logdate}%{SPACE}\[%{USERNAME:logthread}\]%{SPACE}%{WORD:loglevel}%{SPACE}%{QUALIFIED:logclass:text}%{SPACE}-%{SPACE}%{GREEDYDATA:logmsg:text}"

        }

    }
}


output {
    elasticsearch {
        hosts =>["elasticsearch:9200"]
        index => "logstash-%{+yyyy.MM.dd}"
        template => "/etc/logstash/template.json"
        template_name => "logstash"
    }

}

4、template.json

{
  "template": "logstash-*",
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0
  },
  "mappings": {
    "properties": {
      "logclass": {
        "type": "text"
      },
      "logdate": {
        "type": "date",
        "format": "yyyy-MM-dd HH:mm:ss.SSS"
      },
      "loglevel": {
        "type": "keyword"
      },
      "logthread": {
        "type": "keyword"
      },
      "logmsg": {
        "type": "text"
      }
    }
  }
}

6.grok表达式

参考地址:https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/ecs-v1/grok-patterns

正则表达式:https://www.runoob.com/regexp/regexp-rule.html

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-03 11:16:33  更:2021-08-03 11:18:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 19:18:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码