什么是elk?
(不是blg的adc)是以elasticsearch为核心的技术栈,包括:
1.elasticsearch:储存、计算和搜索数据(核心,不可替代的ad)
2.kibana:数据可视化(辅助,帮忙做眼)
3.logstash/beats :数据抓取(帮忙喂人头的打野)
elasticsearch的底层实现是Lucene,是Apache的开源的java语言的搜索引擎类库,提供了搜索引擎的核心API。易扩展、高性能(基于倒排索引)。
什么是倒排索引?
正序索引:
-
正向索引是最传统的,根据id索引的方式。但根据词条查询时,必须先逐条获取每个文档,然后判断文档中是否包含所需要的词条,是根据文档找词条的过程。
- 优点:
- 可以给多个字段创建索引
- 根据索引字段搜索、排序速度非常快
- 缺点:
- 根据非索引字段,或者索引字段中的部分词条查找时,只能全表扫描。
倒排索引:
-
而倒排索引则相反,是先找到用户要搜索的词条,根据词条得到保护词条的文档的id,然后根据id获取文档。是根据词条找文档的过程。
- 优点:
- 可以给多个字段创建索引
- 根据索引字段搜索、排序速度非常快
- 缺点:
- 根据非索引字段,或者索引字段中的部分词条查找时,只能全表扫描。
mysql和es对比:
MySQL | Elasticsearch | 说明 |
---|---|---|
Table | Index | 索引(index),就是文档的集合,类似数据库的表(table) |
Row | Document | 文档(Document),就是一条条的数据,类似数据库中的行(Row),文档都是JSON格式 |
Column | Field | 字段(Field),就是JSON文档中的字段,类似数据库中的列(Column) |
Schema | Mapping | Mapping(映射)是索引中文档的约束,例如字段类型约束。类似数据库的表结构(Schema) |
SQL | DSL | DSL是elasticsearch提供的JSON风格的请求语句,用来操作elasticsearch,实现CRUD |
elk的安装部署
docker compose的安装:
Docker compose(容器编排工具)是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose酒可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,可以从 YML 文件配置中创建并启动所有服务。
Linux 上我们可以从 Github 上下载它的二进制包来使用,最新发行的版本地址:Releases · docker/compose · GitHub。运行以下命令以下载 Docker Compose 的当前稳定版本:(最好和自己docker版本对应)
$ sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
安装其他版本的 Compose,替换 ''v2.2.2''。
将可执行权限应用于二进制文件:(给权限)
$ sudo chmod +x /usr/local/bin/docker-compose
创建软链:
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
测试是否安装成功:
$ docker-compose version
能够显示版本信息则成功!
创建一个docker 网络 后面用
$ docker network create elk
配置文件
建立一个名为elk.yml 的文件,输入配置文件信息如下:
version: '3'
services:
elasticsearch:
restart: always
image: docker.elastic.co/elasticsearch/elasticsearch:7.10.2
container_name: elasticsearch
hostname: elasticsearch
privileged: true
ulimits:
memlock:
soft: -1
hard: -1
environment:
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- "discovery.type=single-node"
ports:
- "9200:9200"
- "9300:9300"
volumes:
- "./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml"
- "./elasticsearch/plugins:/usr/share/elasticsearch/plugins:rw"
- "./elasticsearch/data:/usr/share/elasticsearch/data:rw"
networks:
- elk
kibana:
restart: always
container_name: kibana
image: docker.elastic.co/kibana/kibana:7.10.2
environment:
ELASTICSEARCH_HOSTS: http://elasticsearch:9200
ports:
- "5601:5601"
depends_on:
- elasticsearch
networks:
- elk
logstash:
image: docker.elastic.co/logstash/logstash:7.10.2
container_name: logstash
ports:
- "5044:5044"
restart: always
volumes:
- "./logstash/config:/usr/share/logstash/pipeline"
- "./logstash/plugins:/usr/share/logstash/plugins"
- "./logstash/data:/usr/share/logstash/data"
- "./logstash/logs:/usr/share/logstash/logs"
- "./logstash/lib/mysql-connector-java-8.0.23.jar:/usr/share/logstash/mysql-connector-java-8.0.23.jar"
depends_on:
- elasticsearch
networks:
- elk
networks:
elk:
external: true
可将 image 换成:
image: elasticsearch:7.8.0
image: kibana:7.8.0
解释:
顶部配置:
version: '3'
这是Docker Compose文件的版本。
服务定义
配置文件定义了三个服务:elasticsearch
、kibana
和logstash
。
elasticsearch:
image
: 使用的对应镜像 ,改成自己的
container_name
: 容器名称
volumes
: 挂载主机目录到容器内部目录。配置文件、插件、数据目录的挂载。
networks
: 该容器所属的网络,这里是elk
网络
environment:(有些缩写为-e)设置环境变量,第一个是设置堆内存大小;512M;第二个是运行模式,single-node为单点模式运行
volumes:(有些缩写为-v)数据卷挂载,data为数据保存目录,plugin为插件目录(为将来es插件扩张)
port(有些缩写为-p
):端口,第一个9200为暴露在http的端口,为用户访问;9300是各个容器互联的端口(如果是云服务器,需要将端口开放才能被访问到)
kibana:
environment:设置环境变量, 用【容器名:地址名】让kibana连接es
其余的都差不多。
版本一定要和es一致!
kibana启动较慢,可用命令康康:
docker logs -f kibana
网络配置
定义了一个外部网络elk
,所有服务都在这个网络中运行
使用docker compose 一键启动
运行配置文件,建立es集群:
docker-compose -f elk.yml up -d
启动完毕!,使用 docker ps 查看
可以在浏览器输入 服务器ip地址:5601 如 172.0.0.1:5601 进入 kibana,利用辅助做的眼看可视化界面:
点击右上角的 Dev tools 可以进入DSL控制台,可以发送DSL请求(类似发送sql语句)
kibana可以将语句发送给es进行crud操作
运行结果: