在Docker上运行Elastic Stack并创建日志监控服务,步骤一- Elasticsearch部分
请为以下内容提供中文的同义句:背景。
背景:职业或社会活动发生的环境或情况。
我在业务中使用了一个名为Kibana的工具来可视化Elasticsearch,并通过监控日志来实现。但是,由于对于其中使用的技术及其背后的工作原理不太了解,因此我决定通过实际开发一个原型来加深理解。
然而,寻找以清晰地记录以下两个方面的信息时,我却遇到了一些困难,这让我感到意外并不如预期,所以我决定在这里发帖求助。
-
- Spring bootアプリケーションのログをKibanaで可視化させるまでの一連の流れ
- Docker環境でfilebeatを用いたログの具体的な収集方法
如果您想尽快使用成品并进行测试,请参考以下文章。
在Docker上运行Elastic Stack并创建日志监控服务-演示篇。
能做的事情
这篇帖子将以共四篇的系列形式发表!如果您喜欢,也请务必查看其他的文章。
-
- 将Elasticsearch安装在Docker上,并尝试运行它进行验证。
将Kibana安装在Docker上,并尝试使用它来可视化数据。
使用Filebeat来显示日志文件在Kibana上。
在本地运行一个简单的Spring Web应用程序,生成日志并在Kibana上进行可视化。
示范部分:暂且试运行最终产品。
Elasticsearch 是什么
Elasticsearch是一款分布式的免费且开源的搜索和分析引擎。它可以处理包括文本、数字和地理空间信息在内的各种类型的数据,同时支持结构化数据和非结构化数据。Elasticsearch是基于Apache Lucene开发的,并于2010年由Elasticsearch N.V.(即Elastic的前身公司)首次发布。Elasticsearch以其简单的REST API、分布式设计以及速度和规模上的优势而广泛应用,目前仍然是Elastic Stack的核心产品。Elastic Stack是一组免费且开源的工具,可以实现从数据发送到数据丰富化、存储、分析和可视化的整个过程。Elasticsearch、Logstash、Kibana的首字母组合成了“ELK Stack”这个昵称。随着轻量级的数据传输代理Beats的加入,就形成了Elastic Stack。
如果仅就本次目的来说,可以说Elastic Stack是保存、检索和分析粗略数据的核心服务。
操作步骤
那么现在我们开始在Docker上启动Elasticsearch吧。这次我们将使用docker-compose进行开发,以便同时运行多个服务。
前提 – 提前在中国汉语中解释某事的前提条件或基本要素。
-
- docker, docker-composeがインストール済み
- curlコマンドがインストール済み
1. 文件准备
首先,创建一个基本的项目文件夹,并按以下的文件夹结构进行组织。该项目的名称我们称之为elastic-docker-demo,但你也可以更改。elasticsearch.yml和docker-compose.yml可以保持为空即可。
/elastic-docker-demo/
elasticsearch/
elasticsearch.yml
docker-compose.yml

2. 准备 Docker
将 docker-compose.yml 文件进行如下编辑
version: '3.2'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.13.0
hostname: elastic101
container_name: cont-elasticsearch
ports:
- 9200:9200
mem_limit: 1g
volumes:
- type: bind
source: ./elasticsearch/elasticsearch.yml
target: /usr/share/elasticsearch/config/elasticsearch.yml
read_only: true
- type: volume
source: elasticsearch-data
target: /usr/share/elasticsearch/data
volumes:
elasticsearch-data:
driver: local
我会简要解释关键点。
-
- imageを指定して、どのイメージからコンテナを作成するか決定しています。
-
- hostnameを指定することで、ほかの場所からもホスト名でこのコンテナにアクセスできるようになります。
-
- volumesを設定することで、以下の2つを実現しています。
ホストに存在するelasicsearchの設定ファイルを共有
elasticsearchコンテナ内のデータを永続化、コンテナ起動時に以前のデータ存在していたら再利用
如果您想更详细地了解卷,请点击此处。(https://y-u-y-a-blog.com/tech/docker/set-up-myself-volume/)
3. 准备Elasticsearch的配置文件
将elasticsearch.yml文件按照以下方式进行编辑。
cluster.name: logging-cluster # default value: elasticsearch
node.name: logging-node # default: the hostname of the machine
network.host: elastic101
discovery.seed_hosts:
- elastic101
cluster.initial_master_nodes:
- logging-node
您可以为Elasticsearch的每个节点准备这样的配置文件,但由于本次我们只在一个节点上运行,所以只需要一个配置文件就足够了。
请自由设置cluster.name和node.name,并将其设置在cluster.initial_master_nodes中,以设置为自身的节点名称。
请将network.host和discovery.seed_hosts设置为在docker-compose.yml中设置的elasticsearch的主机名。
这里只做了最基本的设置来测试Elasticsearch,若要在生产环境中使用,还需要进行更复杂的设置,如安全设置和多节点设置等。如果您有兴趣,可以查阅官方文档:
https://www.elastic.co/guide/en/elasticsearch/reference/7.13/security-minimal-setup.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/important-settings.html
恭喜恭喜!這樣設定基本上已經完成了,讓我們在下一個節點中確認它是否成功地啟動吧。
请确认是否已经执行了以下命令,然后尝试访问 Elasticsearch (http://localhost:9200)。(启动大约需要1-2分钟)
docker-compose up -d
若返回的JSON数据如下所示,则表示成功。
{
"name" : "logging-node",
"cluster_name" : "logging-cluster",
"cluster_uuid" : "LSQzRQSZRPSuwLc9e0yW0Q",
"version" : {
"number" : "7.13.0",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "5ca8591c6fcdb1260ce95b08a8e023559635c6f3",
"build_date" : "2021-05-19T22:22:26.081971330Z",
"build_snapshot" : false,
"lucene_version" : "8.8.2",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
提示:当无法访问时,可以尝试以下命令来确认启动是否成功,并检查日志。
这样做应该可以帮助您了解当前容器的状况。
docker-compose logs -f
-
- ログが現在進行形で出ている –> 起動の途中かも、少し待ってリトライする
-
- コンテナが全く起動してない・すぐに終了している –> Dockerの設定ミスの可能性あり
- 起動はしているがエラーが出る・ネットワークにアクセス出来ない –> elasticserachの設定ミスの可能性あり
5. 试着实际操作一下
接下来,让我们尝试着输入一些数据,然后再多做一些操作。
Elasticsearch提供了Rest API,可以通过GET、POST等HTTP请求进行通信。
参考官方教程,首先我们将尝试在Elasticsearch中进行搜索,看看是否能在没有数据的情况下进行搜索。
下面的命令是一个搜索请求,用于搜索”logs-my_app-default”索引中存在的数据。
curl -X GET "localhost:9200/logs-my_app-default/_search?pretty" -H 'Content-Type: application/json' -d'
{
"query": {
"match_all": { }
},
"sort": [
{
"@timestamp": "desc"
}
]
}
'
毫不奇怪地,如果您没有注册名为logs-my_app-default的索引,那么会返回一个指示索引未找到的错误消息(index_not_found_exception)。现在让我们马上尝试添加数据吧。
以下请求是将事件”192.0.2.42 – – [06/May/2099:16:21:15 +0000] \”GET /images/bg.jpg HTTP/1.0\” 200 24736″保存到名为logs-my_app-default的索引的请求。由于这个索引目前不存在,它将自动创建。
curl -X POST "localhost:9200/logs-my_app-default/_doc?pretty" -H 'Content-Type: application/json' -d'
{
"@timestamp": "2099-05-06T16:21:15.000Z",
"event": {
"original": "192.0.2.42 - - [06/May/2099:16:21:15 +0000] \"GET /images/bg.jpg HTTP/1.0\" 200 24736"
}
}
'
我们再次发送之前遇到错误的搜索请求。
这次,会返回以下不同的数据。
{
"took" : 13,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : null,
"hits" : [
{
"_index" : ".ds-logs-my_app-default-2021.06.26-000001",
"_type" : "_doc",
"_id" : "yhB_R3oB145PadIrNZ_a",
"_score" : null,
"_source" : {
"@timestamp" : "2099-05-06T16:21:15.000Z",
"event" : {
"original" : "192.0.2.42 - - [06/May/2099:16:21:15 +0000] \"GET /images/bg.jpg HTTP/1.0\" 200 24736"
}
},
"sort" : [
4081767675000
]
}
]
}
}
我认为通过以上操作,可以确认elasticsearch正常运行。
最后,请执行以下命令以停止容器。
docker-compose down -v --rmi local
我们继续设置Kibana吧!在Docker上运行Elastic Stack并创建日志监控服务直至第二部分- Kibana篇。
请提供一个文具的参考品牌。
-
- Docker and Volume: https://y-u-y-a-blog.com/tech/docker/set-up-myself-volume/
Elasticsearch command: https://qiita.com/nskydiving/items/1c2dc4e0b9c98d164329
Elasticsearch Settings: https://www.elastic.co/guide/en/elasticsearch/reference/current/important-settings.html
Elasticsearch Security: https://www.elastic.co/guide/en/elasticsearch/reference/7.13/security-minimal-setup.html
Elasticsearch get started: https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started.html