efk使用_如何使用EFK创建开源堆栈

efk使用

管理服务器的基础架构并非易事。 当一个群集的行为异常时,登录到多个服务器,检查每个日志,并使用多个过滤器,直到您发现罪魁祸首不是对资源的有效利用。

改进处理基础结构或应用程序的方法的第一步是实施集中式日志记录系统。 这将使您能够将来自任何应用程序或系统的日志收集到一个集中的位置,并对它们进行过滤,汇总,比较和分析。 如果有服务器或应用程序,则应该有一个统一的日志记录层。

值得庆幸的是,我们有一个开源堆栈可以简化这一过程。 结合使用Elasticsearch,Fluentd和Kibana(EFK),我们可以创建功能强大的堆栈,以在集中位置收集,存储和可视化数据。

让我们首先定义每个组件以了解全局。 Elasticsearch是一个开源的分布式RESTful搜索和分析引擎,或者仅仅是存储所有日志的对象存储。 Fluentd是一个开源数据收集器,可让您统一数据收集和使用以更好地使用和理解数据。 最后, Kibana是Elasticsearch的Web UI。

一张图片胜过千言万语:

EFK stack

使用集中式Fluentd聚合器的EFK堆栈。

图片由Michael Zamot,CC BY

还有其他收集日志的方法,例如在每个主机中运行一个小型Fluentd转发器,但这超出了本文的范围。

要求

我们将每个组件安装在其自己的Docker容器中。 使用Docker,我们可以更快地部署每个组件,将重点放在EFK上,而不是发行版专用位,并且我们始终可以删除容器并重新开始。 我们将使用官方的上游图片。

要了解有关Docker的更多信息,请阅读Vincent Batts的精彩文章: Docker初学者指南

通过以root用户身份运行以下命令来提高mmap限制​​:


$ sudo sysctl -w vm.max_map_count=262144 

要永久设置此值,请更新/etc/sysctl.confvm.max_map_count设置。

这是必需的; 否则,Elasticsearch可能会崩溃。

运行Elasticsearch

要允许容器彼此通信,请创建一个Docker网络:



   
   
$ sudo docker network create efk
[...]

执行以下命令以在Docker中启动Elasticsearch:


$ sudo docker run --network=efk --name elasticsearch -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e "cluster.name=docker-cluster" -e "bootstrap.memory_lock=true" -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" --ulimit memlock=-1:-1 -v elasticdata:/usr/share/elasticsearch/data docker.elastic.co/elasticsearch/elasticsearch-oss:6.2.2 

验证容器正在运行:



   
   
$ sudo docker ps
CONTAINER ID        IMAGE                                                     COMMAND                  CREATED              STATUS              PORTS                                            NAMES
6e0db1486ee2        docker.elastic.co/elasticsearch/elasticsearch-oss:6.2.2   "/usr/local/bin/docke"   About a minute ago   Up About a minute   0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp   elasticsearch

让我们解耦命令以了解我们刚刚做了什么:

  • 我们使用docker run创建一个新的容器。
  • 我们使用--network将容器附加到该特定网络。
  • 我们需要定义一个容器名称; 它将用作主机名。
  • 参数-p将我们的主机端口映射到容器端口。 Elasticsearch使用端口9200和9300。
  • -e的多个参数是传递到容器以更改配置的环境变量。
  • 我们定义了一个自定义ulimit来禁用交换,以提高性能和节点稳定性。
  • 根据设计,容器是临时的。 这意味着它们不存储数据,因此为了保持数据和日志的安全,我们需要创建一个卷并将其安装在容器中。 在我们的情况下,它已安装到/usr/share/elasticsearch/data 。 这是Elasticsearch存储数据的路径。

验证该卷已创建:



   
   
$ sudo docker volume ls
[...]
local               elasticdata

即使删除容器,此卷也将保留。

大! Elasticsearch正在运行。 让我们继续。

运行基巴纳

Kibana是一个简单得多的命令。 执行以下命令来旋转它:


$ sudo docker run --network=efk --name kibana -d -p 5601:5601 docker.elastic.co/kibana/kibana-oss:6.2.2 

默认情况下,Kibana将尝试与名为elasticsearch的主机进行通信

确认您可以通过以下URL在浏览器中访问Kibana:http:// <docker host>:5601

此时,Elasticsearch尚未索引任何数据,因此您将无法做更多的事情。

让我们开始收集日志!

运行流畅

以下步骤比较棘手,因为官方Docker映像不包含Elasticsearch插件。 我们将定制。

创建一个名为fluentd的目录,并创建一个名为plugins的子目录:


$ mkdir -p fluentd/plugins 

现在,让我们创建Fluentd配置文件。 在fluentd目录中,创建一个名为fluent.conf的文件,其内容如下:



   
   
$ cat fluentd/fluent.conf
<source>
  type syslog
  port 42185
  tag  rsyslog
</source>

<match rsyslog.**>
  type copy
  <store>
    type elasticsearch
    logstash_format true
    host elasticsearch # Remember the name of the container
    port 9200
  </store>
</match>

<source>块启用syslog插件,侦听端口和地址。 块<match rsyslog.**>将匹配来自syslog插件的所有日志,并将数据发送到Elasticsearch。

现在在Fluentd文件夹中创建另一个文件Dockerfile



   
   
$ cat fluentd/Dockerfile
FROM fluent/fluentd:v0.12-onbuild

RUN apk add --update --virtual .build-deps \
        sudo build-base ruby-dev \
 && sudo gem install \
        fluent-plugin-elasticsearch \
 && sudo gem sources --clear-all \
 && apk del .build-deps \
 && rm -rf /var/cache/apk/* \
           /home/fluent/.gem/ruby/2.3.0/cache/*.gem

这将修改官方的Fluentd Docker映像并添加Elasticsearch支持。

Fluentd目录应如下所示:



   
   
$ ls fluentd/
Dockerfile  fluent.conf  plugins

现在我们可以构建容器了。 在Fluentd目录中执行以下命令:



   
   
$ sudo docker build fluentd/
[...]
Successfully built <Image ID>

现在,我们准备开始堆栈的最后一部分。 执行以下命令以启动容器:


$ sudo docker run -d --network efk --name fluentd -p 42185:42185/udp <Image ID> 

您的统一日志堆栈已部署。 现在是时候对主机的rsyslog进行配置,以将数据发送到Fluentd。

登录到要从中收集日志的每个节点,并在/etc/rsyslog.conf的末尾添加以下行:


*.* @<Docker Host>:42185 

然后重新启动rsyslog服务:


$ sudo systemctl restart rsyslog 

不要忘了检查Kibana,您的所有日志都将在那里。

用Docker Compose打包所有内容

我们可以使用Docker Compose将之前完成的所有步骤组合到一个命令中。 Compose是用于定义和运行多容器Docker应用程序的工具。 通过Compose,您可以使用YAML文件(称为Compose文件)来配置应用程序的服务。 在我们的案例中,是EFK服务。

要安装Docker Compose,请执行以下命令:



   
   
$ sudo curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

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

验证它是否正常工作:



   
   
$ docker-compose version
docker-compose version 1.19.0, build 9e633ef

太棒了! 我们之前执行的所有步骤都可以使用以下docker-compose.yml文件进行总结(我们仍然需要创建Fluentd文件夹和文件):



   
   
$ cat docker-compose.yml
version: '2.1'
services:
  fluentd:
    build: ./fluentd
    links:
      - "elasticsearch"
    expose:
      - 42185
    ports:
      - "42185:42185/udp"
    logging:
        driver: "json-file"
        options:
            max-size: 100m
            max-file: "5"

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.2.2
    container_name: elasticsearch
    ports:
      - "9200:9200"
    environment:
      - "discovery.type=single-node"
      - "cluster.name=docker-cluster"
      - "bootstrap.memory_lock=true"
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - elasticdata:/usr/share/elasticsearch/data

  kibana:
    image: docker.elastic.co/kibana/kibana-oss:6.2.2
    container_name: kibana
    links:
      - "elasticsearch"
    ports:
      - "5601:5601"

volumes:
  elasticdata:
    driver: local

然后,您可以使用一个命令启动所有容器:


$ sudo docker-compose up 

如果要删除所有容器(卷除外):


$ sudo docker-compose rm 

使用一个简单的YAML文件,您的概念证明就可以立即部署到任何地方,并获得一致的结果。 当您对解决方案进行了彻底的测试后,请别忘了阅读ElasticsearchFluentdKibana的官方文档,以确保您的实施生产质量。

当您使用EFK(和Docker)时,您将认识到它的实用性,并且您作为系统管理员的生活将永远不同。

进一步阅读

使用Docker安装Elasticsearch

使用Docker安装Fluentd

统一日志记录层:将数据转化为行动

Docker撰写

翻译自: https://opensource.com/article/18/3/efk-creating-open-source-stack

efk使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值