ElasticSearch簡介
Elasticsearch 是一個分布式的免費開源搜索和分析引擎,適用於包括文本、數字、地理空間、結構化和非結構化數據等在內的所有類型的數據。Elasticsearch 在 Apache Lucene 的基礎上開發而成,由 Elasticsearch N.V.(即現在的 Elastic)於 2010 年首次發布。Elasticsearch 以其簡單的 REST 風格 API、分布式特性、速度和可擴展性而聞名,是 Elastic Stack 的核心組件;Elastic Stack 是一套適用於數據采集、擴充、存儲、分析和可視化的免費開源工具。人們通常將 Elastic Stack 稱為 ELK Stack(代指 Elasticsearch、Logstash 和 Kibana),目前 Elastic Stack 包括一系列豐富的輕量型數據采集代理,這些代理統稱為 Beats,可用來向 Elasticsearch 發送數據。
Elasticsearch 的用途是什么?
Elasticsearch 在速度和可擴展性方面都表現出色,而且還能夠索引多種類型的內容,這意味着其可用於多種用例:
- 應用程序搜索
- 網站搜索
- 企業搜索
- 日志處理和分析
- 基礎設施指標和容器監測
- 應用程序性能監測
- 地理空間數據分析和可視化
- 安全分析
- 業務分析
Elasticsearch 索引是什么?
Elasticsearch 索引指相互關聯的文檔集合。Elasticsearch 會以 JSON 文檔的形式存儲數據。每個文檔都會在一組鍵(字段或屬性的名稱)和它們對應的值(字符串、數字、布爾值、日期、數值組、地理位置或其他類型的數據)之間建立聯系。
Elasticsearch 使用的是一種名為倒排索引的數據結構,這一結構的設計可以允許十分快速地進行全文本搜索。倒排索引會列出在所有文檔中出現的每個特有詞匯,並且可以找到包含每個詞匯的全部文檔。
在索引過程中,Elasticsearch 會存儲文檔並構建倒排索引,這樣用戶便可以近實時地對文檔數據進行搜索。索引過程是在索引 API 中啟動的,通過此 API 您既可向特定索引中添加 JSON 文檔,也可更改特定索引中的 JSON 文檔。
Docker run 安裝
內核設置必須設置為vm.max_map_count至少262144用於生產用途。
vi /etc/sysctl.conf
vm.max_map_count=262144
ElasticSearch
docker network create elastic
docker run -itd --name es01-test --net elastic -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms512m -Xmx512m" docker.elastic.co/elasticsearch/elasticsearch:7.16.3
查看效果
curl localhost:9200
{
"name" : "e55c439c43e2",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "IpA90qJnSiCapy0Q1b8keQ",
"version" : {
"number" : "7.16.3",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "4e6e4eab2297e949ec994e688dad46290d018022",
"build_date" : "2022-01-06T23:43:02.825887787Z",
"build_snapshot" : false,
"lucene_version" : "8.10.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
Kibana
應確保kibana的版本和elasticSearch的版本一致。
docker run -itd --name kib01-test --net elastic --link es01-test:elasticsearch -p 5601:5601 -e "ELASTICSEARCH_HOSTS=http://elasticsearch:9200" -e ES_JAVA_OPTS="-Xms128m -Xmx128m" docker.elastic.co/kibana/kibana:7.16.3
網頁端查看效果(注:55601是virtualBox Nat網絡端口映射):
Docker Compose 安裝方式
先強制刪除es01-test和kib01-test(或者采用先stop 再rm的方式,-f是強制刪除)
docker rm -f es01-test
docker rm -f kib01-test
docker-compose.yml
version: '2.2'
services:
elasticsearch:
image: elasticsearch:7.16.3 #鏡像
container_name: elk_elasticsearch #定義容器名稱
restart: always #開機啟動,失敗也會一直重啟
environment:
- "cluster.name=elasticsearch" #設置集群名稱為elasticsearch
- "discovery.type=single-node" #以單一節點模式啟動
- "ES_JAVA_OPTS=-Xms256m -Xmx256m" #設置使用jvm內存大小
volumes:
- /data/elk/elasticsearch/plugins:/usr/share/elasticsearch/plugins #插件文件掛載
- /data/elk/elasticsearch/data:/usr/share/elasticsearch/data #數據文件掛載
ports:
- 9200:9200
networks:
- elastic
kibana:
image: kibana:7.16.3
container_name: elk_kibana
restart: always
depends_on:
- elasticsearch #kibana在elasticsearch啟動之后再啟動
environment:
- ELASTICSEARCH_URL=http://elasticsearch:9200 #設置訪問elasticsearch的地址
ports:
- 5601:5601
networks:
- elastic
logstash:
image: logstash:7.16.3
container_name: elk_logstash
restart: always
volumes:
- /data/elk/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf #掛載logstash的配置文件
depends_on:
- elasticsearch #kibana在elasticsearch啟動之后再啟動
links:
- elasticsearch:es #可以用es這個域名訪問elasticsearch服務
ports:
- 4560:4560
networks:
- elastic
mysql:
restart: always
image: mysql:8.0
container_name: mysql-lable
volumes:
- /apps/mysql/mydir:/mydir
- /apps/mysql/datadir:/var/lib/mysql
- /apps/mysql/conf/my.cnf:/etc/my.cnf
# 數據庫還原目錄 可將需要還原的sql文件放在這里
- /apps/mysql/source:/docker-entrypoint-initdb.d
environment:
- "MYSQL_ROOT_PASSWORD=uu001"
- "MYSQL_DATABASE=uudemo"
- "TZ=Asia/Shanghai"
ports:
# 使用宿主機的3306端口映射到容器的3306端口
# 宿主機:容器
- 3306:3306
networks:
elastic:
driver: bridge
/apps/mysql/conf/my.conf,內容如下:
[mysqld]
user=mysql
default-storage-engine=INNODB
character-set-server=utf8
character-set-client-handshake=FALSE
collation-server=utf8_unicode_ci
init_connect='SET NAMES utf8'
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
/data/elk/logstash/logstash.conf,內容如下:
input {
tcp {
mode => "server"
host => "0.0.0.0"
port => 4560
codec => json_lines
}
}
output {
elasticsearch {
hosts => "es:9200"
index => "logstash-%{+YYYY.MM.dd}"
}
}
執行以下命令,以守護進程方式啟動
cd /data/elk
chmod 777 elasticsearch/data
docker-compose up -d
錯誤解決
1. 安裝后外網無法訪問。
解決:docker run -p后面仿照官網加了127.0.0.1:9200:9200,這個127.0.0.1是回環地址,外網訪問不到,去掉127.0.0.1即可。
2.訪問ui settings Elasticsearch plugin is red
解決:安裝版本不一致,保持一致即可
3. kibana server is not ready yet
通過查看日志分析問題
docker ps |grep kib
docker logs kibana的容器名稱
發下以下錯誤:(大概意思是未發現es結點)
解決:查看配置文件(通過卷映射或者到容器內查看)
docker exec -it kibana容器名稱 /bin/bash
ls
LICENSE.txt NOTICE.txt README.txt bin config data node node_modules package.json plugins src x-pack
cd config
ls
kibana.yml node.options
cat kibana.yml
#
# ** THIS IS AN AUTO-GENERATED FILE **
#
# Default Kibana configuration for docker target
server.host: "0.0.0.0"
server.shutdownTimeout: "5s"
elasticsearch.hosts: [ "http://elasticsearch:9200" ]
從這里可以看出kibana默認連接的是http://elasticsearch:9200,這里可以修改這里,也可以在docker run的時候 加上--link es實例名稱:elasticsearch
links實質是在kibana的etc/hosts設置一個對應的映射。
3.ElasticsearchException[failed to bind service]; nested: AccessDeniedException[/usr/share/elasticsearch/data/nodes];
解決:權限問題。執行以下命令配置權限
cd /data/elk
chmod 777 elasticsearch/data
查看效果:
需要如要設置登錄密碼,需要配置Xpack,(后續再補充)
引用
https://www.elastic.co/guide/en/kibana/current/docker.html
https://www.cnblogs.com/woshimrf/p/docker-es7.html
https://www.jianshu.com/p/2d78ce6bc504