ELK搭建

ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件实现日志采集、分析、展示,但并非全部。

Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。

Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。

Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。

一、参考资料

二、下载相关的docker镜像

docker pull elasticsearch:7.6.0
docker pull kibana:7.6.0
docker pull logstash:7.6.0
docker pull mobz/elasticsearch‐head:5

三、 安装elasticsearch

创建一个elk文件夹, 后面的elk日志采集系统的配置文件都放在这里面

mkdir /home/elk

创建elasticsearch配置文件

vi /home/elk/elasticsearch.yml

在里面添加如下配置:

cluster.name: "docker-cluster"
network.host: 0.0.0.0
# 访问ID限定,0.0.0.0为不限制,生产环境请设置为固定IP
transport.host: 0.0.0.0
# elasticsearch节点名称
node.name: node-1
# elasticsearch节点信息
cluster.initial_master_nodes: ["node-1"]
# 下面的配置是关闭跨域验证(可以不开启)
http.cors.enabled: true
http.cors.allow-origin: "*"

创建并启动elasticsearch容器

docker run -di -p 9200:9200 -p 9300:9300 --name=elasticsearch -v /home/elk/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch:7.6.0

之后通过9200端口在浏览器上访问(需要开启外网访问权限),有信息返回则成功;,像下面的信息:

{
"name" : "node-1",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "7jUr1QFPQcSbDGG4A4c5Og",
"version" : {
"number" : "7.6.0",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "7f634e9f44834fbc12724506cc1da681b0c3b1e3",
"build_date" : "2020-02-06T00:09:00.449973Z",
"build_snapshot" : false,
"lucene_version" : "8.4.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}

注意:如果需要添加插件时,需要将容器的插件目录映射到实际的路径中或者通过命令(如安装ik分词器:docker cp ik elasticsearch:/usr/share/elasticsearch/plugins/)将其拷贝到容器中

可能遇到的问题

1. 启动成功后,过了一会就停止

这与我们刚才修改的配置有关,因为elasticsearch在启动的时候会进行一些检查,比如最多打开的文件的个数以及虚拟内存

区域数量等等,如果你放开了此配置,意味着需要打开更多的文件以及虚拟内存(实际就是硬件配置达不到它的要求),所以我们还需要系统调优。

  • 修改/etc/security/limits.conf ,添加如下内容:

      * soft nofile 65536
    * hard nofile 65536

nofile是单个进程允许打开的最大文件个数 soft nofile 是软限制 hard nofile是硬限制

  • 修改/etc/sysctl.conf,追加内容

      vm.max_map_count=655360

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

执行下面命令 修改内核参数马上生效,之后重启服务器和docker服务

sysctl ‐p
2. 启动失败显示如下日志信息
ERROR: [1] bootstrap checks failed
[1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured

这个是由于elasticsearch7是集群多节点的版本,需要在elasticsearch.yml中添加如下配置(我们已经在上面配置了无需再处理):

# elasticsearch节点名称
node.name: node-1
# elasticsearch节点信息
cluster.initial_master_nodes: ["node-1"]
3. 外网上已经可以通过9200端口推送数据和查询数据,但是后面安装的kibana等组件却无法连

查看日志发现如下错误

error=>"Elasticsearch Unreachable: [http://192.168.6.128:9200/][Manticore::...

这个问题通常是由于安装在一台机器上的docker容器,防火墙开启的状态下,docker容器内部无法访问宿主机服务(能够访问非宿主机的其他局域网计算机的服务),解决方法如下3种:

  1. 配置防火墙规则firewall-cmd --zone=public --add-port={port}/tcp --permanent,并重载防火墙规则firewall-cmd --reload

     firewall-cmd --zone=public --add-port=9200/tcp --permanent
    firewall-cmd --reload
  2. 启动容器时使用--net host模式(docker的4种网络模式:https://www.jianshu.com/p/22a7032bb7bd)

  3. 关闭防火墙(不建议)

安装elasticsearch‐head插件做调试使用(可以不安装)

docker run ‐di ‐‐name=es-head ‐p 9100:9100 mobz/elasticsearch‐head:5

启动成功后访问9100端口即可使用界面化进行管理elasticsearch。

在本地电脑上安装
  1. 下载head插件:https://github.com/mobz/elasticsearch-head

  2. 将grunt安装为全局命令 。Grunt是基于Node.js的项目构建工具。它可以自动运行你所 设定的任务

     npm install ‐g grunt‐cli
  3. 安装依赖

     npm install
  4. 启动

     grunt server

打开浏览器,输入 http://localhost:9100

四、安装kibana

kibana主要用于对elasticsearch的数据进行分析查看。注意选择的版本必须和elasticsearch的版本相同或者低,建议和elasticsearch的版本相同,否则会无法将无法使用kibana。

创建配置文件

vi /home/elk/kibana.yml

在里面编写如下配置:

server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://elasticsearch的IP:9200"]
# 操作界面语言设置为中文
i18n.locale: "zh-CN"

创建并启动kibana容器

docker run -di --name kibana -p 5601:5601 -v /home/elk/kibana.yml:/usr/share/kibana/config/kibana.yml kibana:7.6.0

启动成功后访问5601端口即可进入kibana管理界面。(进入后要求选择配置,直接选择自己浏览即可)

操作说明

刚进入系统时会有如下提示,任意选择即可

创建索引模式,以便我们可以查看日志信息







五、安装logstash

logstash会将收到的日志信息推送到elasticsearch中

创建配置文件

vi /home/elk/kibana.yml

在里面添加如下配置:

input {
tcp {
port => 5044
# 输入为json数据
codec => json_lines
}
}
filter { }
output {
# 这个是logstash的控制台打印(进行安装调试的时候开启,稍后成功后去掉这个配置即可)
stdout {
codec => rubydebug
}
# elasticsearch配置
elasticsearch {
hosts => ["elasticsearch的IP:9200"]
# 索引名称,没有会自动创建
index => "logstash-%{[server_name]}-%{+YYYY.MM.dd}"
}
}

%{[server_name]} 说明:这个是取输入的json数据中的key为server_name值。

创建和启动logstash容器

docker run -di -p 5044:5044 -v /home/elk/logstash.conf:/usr/share/logstash/pipeline/logstash.conf --name logstash logstash:7.6.0

将微服务的日志推送到logstash中

下面以springboot项目为例

添加maven依赖

    <dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>6.3</version>
</dependency>

下面以springboot中使用logback作为日志处理工具,配置文件(logback-spring.xml)配置信息如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{50}.%M.%L) - %highlight(%msg) %n</pattern>
</layout>
</appender>
<!--logback输出-->
<appender name="STASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>192.168.0.111:5044</destination>
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<!-- 打印行号、方法名,官方不建议在生产环境开启此配置,默认为false(关闭),具网友测试开启后的耗时是未开启的大约360倍的时间(业务量小的时候可以忽略) -->
<includeCallerData>true</includeCallerData>
<!-- 设置时区-->
<timeZone>UTC</timeZone>
<!-- 日期格式化-->
<!-- <timestampPattern>yyyy-MM-dd'T'HH:mm:ss.SSS</timestampPattern>-->
<!-- 添加自定义属性,这里的server_name是服务名-->
<customFields>{"server_name":"demo-server"}</customFields>
</encoder>
<!-- 设置超时时间, 默认没有,使用集群的时候可以加上-->
<!--<writeTimeout>30 seconds</writeTimeout>-->
</appender> <root level="INFO">
<!--本地开发调试将控制台输出打开,同时将日志文件输出关闭,提高日志性能;线上部署请务必将控制台输出关闭-->
<appender-ref ref="STDOUT"/>
<appender-ref ref="STASH"/>
</root>
</configuration>

更详细的配置说明见官方文档:https://github.com/logstash/logstash-logback-encoder

注意生产环境中请把权限相关验证配置上

ELK搭建(docker环境)的更多相关文章

  1. 利用 ELK 搭建 Docker 容器化应用日志中心

    利用 ELK 搭建 Docker 容器化应用日志中心 概述 应用一旦容器化以后,需要考虑的就是如何采集位于 Docker 容器中的应用程序的打印日志供运维分析.典型的比如SpringBoot应用的日志 ...

  2. Windows(WSL2) Linux子系统搭建Docker环境

    摘要:本文主要介绍了如何再Windows(WSL2)中启用Linux系统中,并搭建Docker环境. WSL是适用于 Linux 的 Windows 子系统可让开发人员按原样运行 GNU/Linux ...

  3. Centos搭建 Docker 环境

    搭建 Docker 环境 安装与配置 Docker 安装 Docker Docker 软件包已经包括在默认的 CentOS-Extras 软件源里.因此想要安装 docker,只需要运行下面的 yum ...

  4. Ubuntu搭建docker环境

    一丶自己搭建Ubuntu的虚拟机(网上很多教程) PS:下带图形化界面的Ubuntu镜像,这里只说一下要装那些工具和做那些配置   安装vim         sudo apt-get install ...

  5. 分析脚本搭建docker环境:python, R

    1. 搭建Anaconda Python3.6 FROM nvidia/cuda:8.0-cudnn6-devel-ubuntu16.04 MAINTAINER Tyan <tyan.liu.g ...

  6. Windows10开启Ubuntu子系统并搭建Docker环境

    前言 很早就听说微软有个基于Ubuntu的子系统,一直也没机会尝试一下,之前也只是用VMware安装,但是还要单独安装软件,安装镜像,一点都不fit,所以就瞎折腾下(也是因为最近有空). 搭建Ubun ...

  7. centos 搭建docker环境

    我有一台便宜的腾讯云服务器,当然配置自然也是最低的,只是用来平常玩一玩,学习的用处,下面介绍一下我在上面搭建docker的心得,共勉一下. 安装与配置 Docker 安装 Docker Docker ...

  8. docker-machine 快速搭建docker环境

    环境:腾讯云测试成功 1.条件:本地主机A和远程主机B 2.远程主机B,配置免密登录 1,在本地主机A上生成公钥和私钥,生成命令:ssh-keygen -t rsa 私钥:id_rsa 公钥:id_r ...

  9. centos7 搭建 docker 环境

    1. 安装centos7  http://isoredirect.centos.org/centos/7/isos/x86_64/ 下载 everything 版本,最小化版本可能缺失很多东西 我是在 ...

  10. 基于Centos7.5搭建Docker环境

    docker很火,基于容器化技术,实现一次编译到运行.实现运行环境+服务的一键式打包! 00.部署环境 centos7.5(基于vmware搭建的测试环境,可以跟互联网交互,桥接方式联网) docke ...

随机推荐

  1. red note8 pro谷歌套件

    谷歌核心Apps(即Google官方应用“全家桶”),包括YouTube,Google Now,Google Play store,Google Play Games,Google Maps等: 基于 ...

  2. java socket通讯

    本来是打算验证java socket是不是单线程操作,也就是一次只能处理一个请求,处理完之后才能继续处理下一个请求.但是在其中又发现了许多问题,在编程的时候需要十分注意,今天就拿出来跟大家分享一下. ...

  3. 我们为什么会删除不了集群的 Namespace?

    作者 | 声东  阿里云售后技术专家 导读:阿里云售后技术团队的同学,每天都在处理各式各样千奇百怪的线上问题.常见的有网络连接失败.服务器宕机.性能不达标及请求响应慢等.但如果要评选的话,什么问题看起 ...

  4. schedule of 2016-10-09~2016-10-16(Sunday~Sunday)——1st semester of 2nd Grade

    most important things to do 1.prepare for toefl 2.joint phd preparations 3.ieee trans thesis to writ ...

  5. 如何用visual studio code更好的编写python

    目录 1.先决条件 2.Visual Studio Code扩展安装Python 3.Visual Studio Code扩展安装Python for VSCode 4.Visual Studio C ...

  6. CDQ 入门

    推荐博客 :https://blog.csdn.net/wu_tongtong/article/details/78785836 https://www.cnblogs.com/mlystdcall/ ...

  7. Spring Boot自动装配

    前言 一些朋友问我怎么读源码,这篇文章结合我看源码时候一些思路给大家聊聊,我主要从这三个方向出发: 确定目标,这个目标要是一个具体,不要一上来我要看懂Spring,这是不可能的,目标要这么来定,比如看 ...

  8. Elasticsearch:是什么?你为什么需要他?

    Elasticsearch 是什么? Elasticsearch 是一个分布式的.开源的搜索分析引擎,支持各种数据类型,包括文本.数字.地理.结构化.非结构化. Elasticsearch 是基于 A ...

  9. 机器学习-MNIST数据集使用二分类

    一.二分类训练MNIST数据集练习 %matplotlib inlineimport matplotlibimport numpy as npimport matplotlib.pyplot as p ...

  10. 创建Account控制器 安全性与收尾工作 精通ASP-NET-MVC-5-弗瑞曼