引言

介绍

基于Lucene的搜索服务器,它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。
更适用于集群部署,适合各类 分词,全文搜索,通过建立索引(分片,按节点分片)来实现更快的搜索
Elasticsearch是与Logstash的数据收集和日志解析引擎以及Kibana的分析和可视化平台一起开发的。这三个产品被设计成一个集成解决方案,称为“Elastic Stack”(以前称为“ELK stack”)。
本文只做单节点运行

ELK.png
ELK.png

官方介绍

Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。 作为 Elastic Stack 的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。

注意事项

  • 单点服务器维持稳定可能需要常驻内存 4G 以上
  • 单点ELK维持稳定可能需要CPU 4核心 以上

参考文章

下载集群所需镜像 zookeeper kafka

1
2
docker pull zookeeper
docker pull wurstmeister/kafka

单节点无内网IP使用

1
docker network create elkwork

创建内部网络后在每次 docker run 的时候 增加参数 --net elkwork

elastic相关

  • 旧版本

    1
    2
    3
    docker pull docker.elastic.co/elasticsearch/elasticsearch:5.6.8
    docker pull docker.elastic.co/kibana/kibana:5.6.8
    docker pull docker.elastic.co/logstash/logstash:5.6.8
  • 新版本

    1
    2
    3
    4
    docker pull docker.elastic.co/elasticsearch/elasticsearch:7.7.0
    docker pull docker.elastic.co/kibana/kibana:7.7.0
    docker pull docker.elastic.co/logstash/logstash:7.7.0
    docker pull store/elastic/filebeat:7.7.0

启动elasticsearch 自行替换版本

"discovery.type=single-node" 单节点

1
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:5.6.8

默认用户名 默认密码
elastic changeme

测试是否已经连通-u elastic:changeme 验权

1
curl -u elastic:changeme localhost:9200

浏览器端口访问测试

elasticsearch.png
elasticsearch.png

elasticsearch 各类语法

基本

浏览器访问
http://xxx.xx.xxx.xx:9200/_cat/indices?v 查看当前节点的所有 Index
http://xxx.xx.xxx.xx:9200/_mapping?pretty=true 列出每个 Index 所包含的 Type

验权机制增加参数 -u elastic:changeme 验权

命令行访问
curl -u elastic:changeme -X PUT 'localhost:9200/weather' 可以直接向 Elastic 服务器发出 PUT 请求
curl -u elastic:changeme -X DELETE 'localhost:9200/weather' 发出 DELETE 请求,删除这个 Index

插入数据

1
2
3
4
5
6
curl -X POST 'localhost:9200/account/person' -d '
{
"user": "李四",
"title": "工程师",
"desc": "系统管理"
}'

读取数据

1
curl 'localhost:9200/account/person/1?pretty=true'

示例

1
2
3
4
5
6
7
8
9
10
11
12
{
"_index" : "accounts",
"_type" : "person",
"_id" : "1",
"_version" : 1,
"found" : true,
"_source" : {
"user" : "张三",
"title" : "工程师",
"desc" : "数据库管理"
}
}

删除记录

1
curl -X DELETE 'localhost:9200/accounts/person/1'

更新记录

1
2
3
4
5
6
curl -X PUT 'localhost:9200/accounts/person/1' -d '
{
"user" : "张三",
"title" : "工程师",
"desc" : "数据库管理,软件开发"
}'

返回所有记录

1
curl 'localhost:9200/accounts/person/_search'
  • 索引 :/Index/Type/_search
  • total:返回记录数,本例是2条。
  • max_score:最高的匹配程度,本例是1.0。
  • hits:返回的记录组成的数组。

查询记录

1
2
3
4
5
6
curl 'localhost:9200/accounts/person/_search'  -d '
{
"query" : { "match" : { "desc" : "软件 系统" }},
"from": 1
"size": 1
}'
  • size 返回数量
  • from 开始位置
  • OR搜索,当前搜索的示例是 软件系统
  • AND搜索示例
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    {
    "query": {
    "bool": {
    "must": [
    { "match": { "desc": "软件" } },
    { "match": { "desc": "系统" } }
    ]
    }
    }
    }

参考文章

启动kibana 自行替换版本

1
docker run -d --name kibana -p 8001:5601 docker.elastic.co/kibana/kibana:5.6.8

kibana 容器内部修改配置ip

1
Vi ./config/kibana.yml

重启容器使配置生效

kibana.png
kibana.png

配置 logstash

1
2
3
mkdir /home/tjy/docker/logstash/
mkdir /home/tjy/docker/logstash/conf.d/
vi /home/tjy/docker/logstash/logstash.yml
1
2
path.config: /usr/share/logstash/conf.d/*.conf
path.logs: /var/log/logstash
1
vi /home/tjy/docker/logstash/conf.d/test.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
input {
beats {
port => 5044
codec => "json"
}
}

output {
elasticsearch {
hosts => ["xxx.xx.xxx.xx:9200"]
user => elastic
password => changeme
}
stdout { codec => rubydebug }
}

启动logstash并挂载

1
docker run -it -d -p 8011:5044 -p 9600:9600 --name logstash -v /home/tjy/docker/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml -v /home/tjy/docker/logstash/conf.d/:/usr/share/logstash/conf.d/ docker.elastic.co/logstash/logstash:5.6.8

配置 filebeat

下载 通用配置文件

1
2
3
4
mkdir /Users/XXX/Downloads/Docker/filebeat/
cd /Users/XXX/Downloads/Docker/filebeat
wget https://raw.githubusercontent.com/elastic/beats/7.1/deploy/docker/filebeat.docker.yml
vi filebeat.docker.yml

配置监听 Nginx log

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
filebeat.config:
modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false

filebeat.autodiscover:
providers:
- type: docker
hints.enabled: true

processors:
- add_cloud_metadata: ~

filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/*.log

output.logstash:
hosts: ['logstash:5044']

filebeat 配合 logstash 挂载并启动

以下映射的路径为我自己电脑的路径,需要自行修改!

1
docker run --name filebeat --user=root -d --net elkwork -v /usr/local/var/log/nginx/:/var/log/nginx/ -v /Users/XXX/Downloads/Docker/filebeat/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml -v /var/run/docker.sock:/var/run/docker.sock store/elastic/filebeat:7.7.0

success.png
success.png