ELFK容器化

工作流程图

image

编写 Dockerfile

创建上下文环境

先为这个小测试创建一个目录,作为各个容器的上下文环境

mkdir  elk/{filebeat,logstash,elasticsearch}

1. Filebeat

简单介绍

Filebeat 是一个轻量级的托运人,用于转发和集中日志数据。Filebeat作为代理安装在服务器上,监视您指定的日志文件或位置,收集日志事件,并将它们转发到ElasticsearchLogstash进行索引。

以下是 Filebeat 的工作原理:启动Filebeat时,它会启动一个或多个输入,这些输入将查找您指定的位置的日志数据。
对于Filebeat找到的每个日志,Filebeat启动一个收集器。每个收集器为新内容读取单个日志,并将新日志数据发送到 libbeatlibbeat 聚合事件并将聚合数据发送到您为 Filebeat 配置的输出。

image

Filebeat Logstash 都是以事件为推动的和处理单位的,不是以文件中的行。

a. 准备源数据

elk/filebeat/2018.log

你可以自己准备一个日志文件,或者将上面的内容多复制1000行到文件中

b. 准备配置文件

elk/filebeat/filebeat_to_logstash.yml

filebeat.config:
  modules:
    path: ${path.config}/modules.d/*.yml
    reload.enabled: false

processors:
- add_cloud_metadata: ~

filebeat.inputs:
- type: log
  paths:
    - /*.log
output.logstash:
  # The Logstash hosts
  hosts: ["logstash:5044"]


#output.console:
#  pretty: true
#output.elasticsearch:
#  hosts: '${ELASTICSEARCH_HOSTS:elasticsearch:9200}'
#  username: '${ELASTICSEARCH_USERNAME:}'
#  password: '${ELASTICSEARCH_PASSWORD:}


2. Logstash

简单介绍

集中、转换和存储数据

Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中。
下载

输入、过滤器和输出

Logstash 能够动态地采集、转换和传输数据,不受格式或复杂度的影响。利用 Grok 从非结构化数据中派生出结构,从 IP 地址解码出地理坐标,匿名化或排除敏感字段,并简化整体处理过程。

采集各种样式、大小和来源的数据 (输入)

数据往往以各种各样的形式,或分散或集中地存在于很多系统中。 Logstash 支持 各种输入选择 ,可以在同一时间从众多常用来源捕捉事件。能够以连续的流式传输方式,轻松地从您的日志、指标、Web 应用、数据存储以及各种 AWS 服务采集数据。

实时解析和转换数据 (过滤器)

数据从源传输到存储库的过程中,Logstash 过滤器能够解析各个事件,识别已命名的字段以构建结构,并将它们转换成通用格式,以便更轻松、更快速地分析和实现商业价值。

  • 利用 Grok 从非结构化数据中派生出结构

  • 从 IP 地址破译出地理坐标

  • 将 PII 数据匿名化,完全排除敏感字段

  • 简化整体处理,不受数据源、格式或架构的影响

    我们的过滤器库丰富多样,拥有无限可能。

选择您的存储库,导出您的数据 (输出)

尽管 Elasticsearch 是我们的首选输出方向,能够为我们的搜索和分析带来无限可能,但它并非唯一选择。

Logstash 提供众多输出选择,您可以将数据发送到您要指定的地方,并且能够灵活地解锁众多下游用例。

从 Logstash 的名字就能看出,它主要负责跟日志相关的各类操作,在此之前,我们先来看看日志管理的三个境界吧

境界一 
『昨夜西风凋碧树。独上高楼,望尽天涯路』,在各台服务器上用传统的 linux 工具(如 cat, tail, sed, awk, grep 等)对日志进行简单的分析和处理,基本上可以认为是命令级别的操作,成本很低,速度很快,但难以复用,也只能完成基本的操作。

境界二 
『衣带渐宽终不悔,为伊消得人憔悴』,服务器多了之后,分散管理的成本变得越来越多,所以会利用 rsyslog 这样的工具,把各台机器上的日志汇总到某一台指定的服务器上,进行集中化管理。这样带来的问题是日志量剧增,小作坊式的管理基本难以满足需求。

境界三 
『众里寻他千百度,蓦然回首,那人却在灯火阑珊处』,随着日志量的增大,我们从日志中获取去所需信息,并找到各类关联事件的难度会逐渐加大,这个时候,就是 Logstash 登场的时候了

Logstash 的主要优势,一个是在支持各类插件的前提下提供统一的管道进行日志处理(就是 input-filter-output 这一套),二个是灵活且性能不错

logstash里面最基本的概念(先不管codec)

logstash收集日志基本流程:

input–>filter–>output

input:从哪里收集日志

filter:对日志进行过滤

output:输出哪里

image
image

a. 准备管道配置文件

下面的配置是监听本机的 5044 端口接收 Fielbeat 的输入
并且将处理清洗过的事件数据输出到 elasticsearch

elk/logstash/logstash_nginx.conf

input {
  beats {
    port => 5044
    host => "0.0.0.0"
  }

}
output {
  elasticsearch {
    hosts => ["elasticsearch:9200"] 
    manage_template => false
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
  }
  # stdout { codec => rubydebug }  # 假如有问题,可以打开此行进行调试
}

关于 output

  • hosts ==>["elasticsearch:9200"] 指定机群的主机名,主机名就是容器名
  • manage_template => false 禁用默认的模板,详细官方介绍
  • index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    • %{[@metadata][beat]} 从源数据获取到处理日志的插件,比如Filebeat
    • %{[@metadata][version]} 从源数据获取到版本号
    • %{+YYYY.MM.dd} 以 Logstash 的时间戳格式显示的时间

3. elasticsearch

简单介绍

Elasticsearch 是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎 Apache Lucene基础上的搜索引擎,使用Java语言编写

主要特点

  • 实时分析
  • 分布式实时文件存储,并将每一个字段都编入索引
  • 文档导向,所有的对象全部是文档
  • 高可用性,易扩展,支持集群(Cluster)、分片和复制(Shards 和 Replicas)。见图 1 和图 2
  • 接口友好,支持 JSON
1
2

a. 需要配置

生产环境下, 内核参数 vm.max_map_count 最少设置为 262144
设置方法:

编辑文件 /etc/sysctl.conf
添加一行
vm.max_map_count=262144
并执行如下 命令使之生效
sysctl -w vm.max_map_count=262144

4. kibana

简单介绍

Kibana是一款基于 Apache开源协议,使用 JavaScript语言编写,为 Elasticsearch提供分析和可视化的 Web 平台。它可以在Elasticsearch的索引中查找,交互数据,并生成各种维度的表图.

a. 默认的配置

kibana 的容器其实处于测试性的目的就可以直接运行了。
因为默认的配置文件中集群的 url 就是 http://elasticsearch:9200

下面是容器内默认的配置文件内容
/usr/share/kibana/config/kibana.yml

---
# Default Kibana configuration from kibana-docker.

server.name: kibana
server.host: "0"
elasticsearch.url: http://elasticsearch:9200
xpack.monitoring.ui.container.elasticsearch.enabled: true

整合成docker-compose.yml

注意事项:
整个集群的版本应该一致,各配置文件中对应的ip可以写成容器名

拉取官方镜像

docker pull docker.elastic.co/elasticsearch/elasticsearch:7.4.2
docker pull docker.elastic.co/beats/filebeat:7.4.2
docker pull docker.elastic.co/logstash/logstash:7.4.2
docker pull docker.elastic.co/kibana/kibana:7.4.2

elasticsearch 服务中应该加环境变量

environment:
- discovery.type=single-node

文件 docker-compose.yml 内容

version: "3.2"
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.4.2
    container_name: elasticsearch
    networks:
      - elk-net
    ports:
      - "9200:9200"
    environment:
      - discovery.type=single-node
  filebeat:
    image: docker.elastic.co/beats/filebeat:7.4.2
    container_name: filebeat
    volumes:
      - type: bind
        source: "./filebeat/2018.log"
        target: "/2018.log"
      - type: bind
        source: "./filebeat/filebeat.yml"
        target: "/usr/share/filebeat/filebeat.yml"
    networks:
      - elk-net
    depends_on:
      - logstash
  logstash:
    image: docker.elastic.co/logstash/logstash:7.4.2
    container_name: logstash
    volumes:
      - type: bind
        source: "./logstash/logstash_stdout.conf"
        target: "/usr/share/logstash/pipeline/logstash.conf"
    networks:
       - elk-net
    depends_on:
      - elasticsearch
    
  kibana:
    image: docker.elastic.co/kibana/kibana:7.4.2
    container_name: kibana
    networks:
      - elk-net
    ports:
      - "5601:5601"
    depends_on:
      - elasticsearch

networks:
   elk-net:
     driver: bridge

启动容器

docker-compose up

使用浏览器访问宿主机的 5601 端口

比如 http://127.0.0.1:5601

image.png

image.png

kibana 添加匹配索引的索引模式

要想让 kibana 识别到 elasticsearch 的数据,需要把我们在 elasticsearch 创建好的索引告诉他.

Kibana使用索引模式从Elasticsearch索引中检索可视化等内容。

image.png

image.png

image.png

image.png

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,290评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,107评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,872评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,415评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,453评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,784评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,927评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,691评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,137评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,472评论 2 326
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,622评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,289评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,887评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,316评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,490评论 2 348

推荐阅读更多精彩内容