文章目录

  • 概述
    • Elasticsearch
    • Logstash
    • Kibana
    • ELK 协议栈体系结构
      • 最简单架构ELK结构
      • Logstash 作为日志搜集器
      • Beats 作为日志搜集器
      • 基于 Filebeat 架构的配置部署详解
      • 引入消息队列机制的架构
  • Elasticsearch
    • docker部署
    • DSL
    • 索引命令
    • 文档命令
    • java项目部署es
  • Kibana
    • docker部署
  • 分词器
    • 安装IK分词器
    • 配置词条
    • mapping
  • LogStash
    • LogStash docker部署
    • Java项目输出到logstash
  • 搭建日志系统

概述

ELK是一整套解决方案,是三个软件产品的首字母缩写,Elasticsearch,Logstash 和 Kibana。这三款软件都是开源软件,通常是配合使用,故被简称为ELK协议栈。

日常工作中会面临很多问题,通过工作经验,检查报错流,迅速判断问题出在哪。

系统日志:/var/log 目录下的问题的文件
程序日志: 代码日志(项目代码输出的日志)
服务应用日志
nginx、HAproxy、lvs
tomcat、php-fpm
redis、mysql、mongo
RabbitMq、kafka
Glusterfs、HDFS、NFS等等
日志排除,发现问题根源解决问题

如果1台或者几台服务器,我们可以通过 linux命令,tail、cat,通过grep、awk等过滤去查询定位日志查问题,但是面对多台服务器,一些人就提出了建立一套集中式的方法,把不同来源的数据集中整合到一个地方。

一个完整的集中式日志系统,是离不开以下几个主要特点的。

收集-能够采集多种来源的日志数据
传输-能够稳定的把日志数据传输到中央系统
存储-如何存储日志数据
分析-可以支持 UI 分析
警告-能够提供错误报告,监控机制

Elasticsearch

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

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

Logstash

Logstash 是一个具有实时渠道能力的数据收集引擎。使用 JRuby 语言编写。其作者是世界著名的运维工程师乔丹西塞 (JordanSissel)

主要特点:
几乎可以访问任何数据
可以和多种外部应用结合
支持弹性扩展

它由三个主要部分组成:
Shipper-发送日志数据
Broker-收集数据,缺省内置 Redis
Indexer-数据写入

Kibana

ELK 协议栈的新成员,一个轻量级开源日志文件数据搜集器,基于 Logstash-Forwarder源代码开发,是对它的替代。在需要采集日志数据的 server 上安装Filebeat,并指定日志目录或日志文件后,Filebeat就能读取数据,迅速发送到Logstash进行解析,亦或直接发送到 Elasticsearch进行集中式存储和分析。

ELK 协议栈体系结构

最简单架构ELK结构

只有一个 Elasticsearch、Logstash 和 Kibana 实例。Logstash 通过输入插件从多种数据源(比如日志文件、标准输入 Stdin 等)获取数据,再经过滤插件加工数据,然后经 Elasticsearch 输出插件输出到 Elasticsearch,通过 Kibana 展示

Logstash 作为日志搜集器

这种架构是对上面架构的扩展,把一个 Logstash 数据搜集节点扩展到多个,分布于多台机器,将解析好的数据发送到 Elasticsearch server 进行存储,最后在 Kibana 查询、生成日志报表等

这种结构因为需要在各个服务器上部署 Logstash,而它比较消耗 CPU 和内存资源,所以比较适合计算资源丰富的服务器,否则容易造成服务器性能下降,甚至可能导致无法正常工作。

Beats 作为日志搜集器

这种架构引入 Beats 作为日志搜集器。目前 Beats包括四种:

Packetbeat(搜集网络流量数据);
Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据);
Filebeat(搜集文件数据);
Winlogbeat(搜集 Windows 事件日志数据)。
Beats 将搜集到的数据发送到 Logstash,经 Logstash 解析、过滤后,将其发送到 Elasticsearch存储,并由 Kibana 呈现给用户。

这种架构解决了 Logstash 在各服务器节点上占用系统资源高的问题。相比 Logstash,Beats 所占系统的 CPU 和内存几乎可以忽略不计。另外,Beats 和 Logstash 之间支持 SSL/TLS 加密传输,客户端和服务器双向认证,保证了通信安全。

因此这种架构适合对数据安全性要求较高,同时各服务器性能比较敏感的场景。

基于 Filebeat 架构的配置部署详解

前面提到 Filebeat 已经完全替代了 Logstash-Forwarder 成为新一代的日志采集器,同时鉴于它轻量、安全等特点,越来越多人开始使用它。

引入消息队列机制的架构

Beats 还不支持输出到消息队列,所以在消息队列前后两端只能是 Logstash 实例。这种架构使用 Logstash 从各个数据源搜集数据,然后经消息队列输出插件输出到消息队列中。目前 Logstash 支持 Kafka、Redis、RabbitMQ 等常见消息队列。然后 Logstash 通过消息队列输入插件从队列中获取数据,分析过滤后经输出插件发送到 Elasticsearch,最后通过 Kibana 展示。

这种架构适合于日志规模比较庞大的情况。但由于 Logstash 日志解析节点和 Elasticsearch 的负荷比较重,可将他们配置为集群模式,以分担负荷。引入消息队列,均衡了网络传输,从而降低了网络闭塞,尤其是丢失数据的可能性,但依然存在 Logstash 占用系统资源过多的问题。

Elasticsearch

docker部署

拉取镜像
docker pull elasticsearch:7.6.2

创建容器
docker run --name=es -d -p 9200:9200 -p 9300:9300 --restart=always -e "discovery.type=single-node" elasticsearch:7.6.2

测试网址
curl localhost:9200

DSL

Domain Specified Language 特殊领域语言

“Domain-Specific Language: a computer programming language of limited expressiveness focused on a particular domain.”

查询全部

GET _search
{"query": {"match_all": {}}
}

查询,任意词条匹配度优先级查询
match

短语匹配
match_phrase
match_phrase_prefix

范围比较搜索
range

条件复合查询
bool: must must_not should

排序,和query同级别
sort

分页
from
size

高亮显示,和query同级别
highlight: fields pre_tags post_tags

索引命令

创建
创建索引时默认分配1个主分片 p shard(7.x之后),每个主分片分配1个副本分片 r shard
es尽可能保证主分片平均分配在多个节点上

put test_index
返回结果

修改
一旦创建,不可修改p shard数量,但可修改r shard数量,语法仍是使用PUT

put test_index/_settings
{"number_of_replicas":2
}

删除
delete test_index

查看
get _cat/indices?v

文档命令

不存在则新增,存在则全量替换

put 索引名/_doc/唯一id
{"字段名":"字段值","字段名":"字段值"
}

不存在新增,存在报错

put 索引名/_create/唯一id
{"字段名":"字段值","字段名":"字段值"
}

允许主键自动生成

post 索引名/_doc
{"字段名":"字段值","字段名":"字段值"
}

查询
get 索引名/_doc/唯一id

查询全部
get 索引名/_search

批量查询
#自行搜索

修改
#自行搜索

删除
#自行搜索

bulk批量操作
#自行搜索

注意
写java代码的时候id应该设置成字符串类型

java项目部署es

导入transport,group elasticsearch,version 7.6.2
spring data elasticsearch,一般用这个,springboot整合好的

配置config
spring elasticsearch rest uris 默认是本地的9200端口

定义类和索引关系,使用注解
@Document(indexName, shards, replicas )

类属性对应es属性,有注解
@Id
@Field(name,type,analyzer)

spring data 4.x 操作索引通过indexOperation
注入ElasticsearchRestTemplate
ElasticsearchRestTemplate.indexOps(Item.class)

indexOperation操作,自行阅读源码
create
createMapping
putMapping等

Kibana

docker部署

注意要和Elasticsearch 版本一致
docker pull kibana:7.6.2

创建容器,–link是构造局域网(以前的docker博客中的容器互联部分有写到),单向连接,连接别人的时候使用,前面的是容器名,冒号后面是给容器起的别名,单向连接的原因是Kibana中写的命令需要发给Elasticsearch,虽然是单向连接,但是仍可以接收发送命令的结果
docker run -it -d --name kibana --restart=always --link es:es -p 5601:5601 kibana:7.6.2

进入容器
docker exec -it kibana /bin/bash

进入config文件夹
cd config

修改配置文件
vi kibana.yml

修改es的主机地址,由于是单机配置,改成elasticsearch.hosts: [ “http://es:9200” ]
ip是es:9000的原因是我们使用了docker内联虚拟局域网,es做了映射,es指向es容器的ip
当然了由于是单机,我们写成localhost:9200也是可以的

esc :wq
ctrl+p+q 退出

重启容器
docker restart kibana

访问kibana网址
http://localhost:5601/app/kibana
第一次进入,点击 Explore on my own 按钮,探索我自己的平台

左边点击dev tools,进入控制台

输入get _cat/indices 或者 get _cat/indices?v ,进行测试,原本我们需要用在bash中输入curl localhost:9200/_cat/indices 访问索引,现在kibana配置了es host,在kibana中访问简化了操作,提供了可视化界面

查看分片信息
get _cat/shards
p表示主分片

分词器

安装IK分词器

es默认提供的分词器不支持中文

测试默认分词器

get _analyze
{"text":"lorem oyram isn amld","analyzer":"standard"
}

技术选型:IK分词器

进入es docker
docker exec -it es /bin/bash

安装IK
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.2/elasticsearch-analysis-ik-7.6.2.zip

重启容器
docker restart es

支持两种分词器分别是ik_max_word和ik_smart

ik_smart各个分词之间互斥,没有重叠

测试IK分词器

get _analyze
{"text":"今天是个好天气","analyzer":"ik_max_word"
}

配置词条

进入es docker
docker exec -it es /bin/bash

进入config
cd config

进入ik
cd analysis-ik/

查看当前目录pwd
/usr/share/elasticsearch/config/analysis-ik

退出容器
ctrl+p+q

拷贝容器目录文件到当前目录
docker cp es:/usr/share/elasticsearch/config/analysis-ik .

进入analysis-ik
cd analysis-ik

配置词条,每一行认为是一个词
vim main.dic

把dic拷贝回容器中
docker cp main.dic es:/usr/share/elasticsearch/config/analysis-ik

重启容器
docker restart es

回到9200端口,测试

get _analyze
{"text":"中文检测","analyzer":"ik_max_word"
}

mapping

mapping在es中决定了一个index中的field使用什么数据存储格式,使用什么分词器分析,是否有子字段等等,默认分词器是standard,需要自定义配置

查看mapping
get 索引名/_mappings

追加mapping

put 索引名/_mapping
{"properties" : {"字段名3" : {"type" : "text","analyzer":"ik_max_word"},"字段名4" : {"type" : "integer","fields" : {"keyword" : {"type" : "keyword","ignore_above" : 256}}}}
}

测试属性分词器

get 索引名/_analyze
{"字段名1":"111"
}

LogStash

集中、转换和存储数据,数据处理工具,常用在日志处理,常用在集群、分布式项目中,每次更换主机在容器中定位日志工作繁琐,使用LogStash进行集中日志,LogStash连接数据源和elasticsearch两端。

LogStash docker部署

docker pull logstash:7.6.2

docker run -it -p 4560:4560 --name logstash -d --link es:es --restart=always -d logstash:7.6.2

docker exec -it logstash /bin/bash

vi /usr/share/logstash/config/logstash.yml

修改es host,es:9200

配置输出源和输出目的地
vi /usr/share/logstash/pipeline/logstash.conf

input {tcp {mode => "server"port => 5044}
}filter{
}
output {elasticsearch { action => "index"host => "es:9200"index => "test_log"}
}

退出容器
ctrl + p + q

重启容器
docker restart logstash

Java项目输出到logstash

导入 logstash-logback-encoder

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

配置logback.xml
#自行搜索,主要是配置logstash地址

搭建日志系统

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.4</version>
</dependency>

配置spring.elasticsearch.rest.uris

使用ElasticsearchRestTemplate查询索引

jackson打包数据

编写controller返回信息

随心玩玩(七)ELK日志系统配置部署相关推荐

  1. ELK 日志分析系统和部署

    目录 前言 一.日志分析 1.1  我们需要收集哪些日志 1.2  日志收集后,如何展示(可视化) 1.3   日志收集展示出来后,怎么使用 1.4  我们要怎么收集日志 二.ELK 日志分析系统简介 ...

  2. Docker 部署ELK 日志分析

    Docker 部署ELK 日志分析 elk集成镜像包 名字是 sebp/elk 安装 docke.启动 yum install docke service docker start Docker至少得 ...

  3. ELK日志分析系统介绍及部署

    一.ELK日志分析系统简介 1.1 普通日志服务器: 提高安全性 集中存放日志 缺陷 对日志的分析困难 1.2 ELK日志分析系统的组成 Elasticsearch Logstash Kibana 1 ...

  4. ELK 日志分析系统的部署

    文章目录 一.ELK前言 1.1 需要收集的日志 1.2 日志收集后,如何可视化 1.3 日志收集可视化后,怎么使用 1.4 要怎么收集日志 二.ELK简介 2.1 ElasticSearch介绍 2 ...

  5. ELK日志分析系统概述及部署

    这里写目录标题 一.ELK日志分析系统 1.日志服务器 2.日志处理步骤 二.Elasticsearch概述 1.Elasticsearch特性 三.LogStash概述 1.LogStash主要组件 ...

  6. 超详细部署ELK日志分析系统!每一步骤都有记录!ELK的详细使用!

    目录 一.ELK简介 二.Elasticsearch简介 三.Logstash简介 四.Kibana简介 五.ELK案例部署 5.1 案例环境 5.2 部署elasticsearch 5.3 部署Ap ...

  7. ELK日志分析系统(二)之ELK搭建部署

    文章目录 引言 一.Elasticsearch 集群部署(在Node1上操作) 1.准备环境 2.部署安装Elasticsearch软件 3.配置Elasticsearch主配置文件 4.创建数据存放 ...

  8. ELK日志分析系统之ELK搭建部署

    文章目录 配置ELK日志分析系统 1.配置elasticsearch环境 2.部署elasticsearch软件 2.1 安装Elasticsearch软件 2.2 加载系统服务 2.3 修改elas ...

  9. 携程ELK日志分析平台深耕之路

    源起 日志,看似简单简单的文本,在网站运维人员眼里却似一座蕴含丰富的宝藏.通常以下运维任务都或多或少需要运维人员和日志打交道: 系统健康状况监控 查找故障根源 系统瓶颈诊断和调优 追踪安全相关问题 技 ...

最新文章

  1. 淘淘经受了一次考验...
  2. mysql十大报错_MySQL十大报错函数
  3. 【pmcaff专栏】项目管理失败?如何避免?
  4. 2021-07-21新技术赋能数智财会,用友YonBIP财务云激活企业创新能力
  5. webpack第一节(4)
  6. php autoload用法,php自动加载__autoload()函数用法
  7. Linux下修改SSH登录端口
  8. java jexl 工具类_jexl表达式解析、计算工具类.md
  9. BrnShop开源网上商城第一讲:架构设计
  10. 为什么 Redis 单线程能达到百万+QPS?
  11. java文件传输简单方法
  12. STM8S003F3使用总结——串口
  13. pip cmd下载速度慢解决方案
  14. 记测试双十一秒杀活动的坎坷历程
  15. java写app教程
  16. 2018华为云区块链全球开发者大赛——小链接 大未来
  17. WenetSpeech数据集的处理和使用
  18. mysql列转行统计查询_Mysql 列转行统计查询 、行转列统计查询
  19. [亲测可用]springBoot调用对方webService接口的几种方法示例
  20. 用css画出二叉树,用 Graphviz 绘制一棵漂亮的二叉树

热门文章

  1. 阿里云推出网盘App,开放申请!非会员下载 10MB/s! 还有更厉害的:60M/s
  2. 计算机组成原理--储存器概述
  3. hbuilderx安装教程_HBuilderX入门教程
  4. 基于JSP的某餐厅点餐系统
  5. 基于A*搜索算法迷宫游戏开发
  6. 辛普森悖论和朴素贝叶斯
  7. oracle 创建索引 CREATE INDEX
  8. 卷积神经网络之前向传播算法
  9. 证券投资深度学习_基于风险中性的深度学习选股策略
  10. Circulation:胎儿脑体积预测先天性心脏病患儿的神经发育