ElasticSearch、Kibana 8.x 安装教程
想测试一下 Elastic 的 APM 能力,需要安装一个 ElasticSearch 和 Kibana 的测试环境,顺手记录到博客里,供新手查阅。
环境准备
- OS: Linux lab-dev 6.1.0-27-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.115-1 (2024-11-01) x86_64 GNU/Linux
- ElasticSearch: 8.10.4
ElasticSearch 安装
ElasitcSearch 要运行在非 root 账号下,我这里只是想快速测试,直接创建一个 elasticsearch 账号,回头我直接使用这个账号来安装启动 ElasticSearch。
groupadd elasticsearch
useradd elasticsearch -g elasticsearch -m -s /bin/bash
通过上面命令创建 elasticsearch 用户,直接给一个 bash shell,简单粗暴。完事切换到 elasticsearch 账号,下载 ElasticSearch 安装包:
su - elasticsearch
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.10.4-linux-x86_64.tar.gz
tar -zxvf elasticsearch-8.10.4-linux-x86_64.tar.gz
解压之后,进入 elasticsearch-8.10.4 目录,看到下面的内容:
elasticsearch@lab-dev:~/elasticsearch-8.10.4$ ll
total 2232
drwxr-xr-x 10 elasticsearch elasticsearch 4096 Mar 17 16:22 .
drwxr-xr-x 5 elasticsearch elasticsearch 4096 Mar 18 11:06 ..
drwxr-xr-x 2 elasticsearch elasticsearch 4096 Oct 12 2023 bin
drwxr-xr-x 4 elasticsearch elasticsearch 4096 Mar 18 11:16 config
drwxr-xr-x 8 elasticsearch elasticsearch 4096 Oct 12 2023 jdk
drwxr-xr-x 5 elasticsearch elasticsearch 4096 Oct 12 2023 lib
-rw-r--r-- 1 elasticsearch elasticsearch 3860 Oct 12 2023 LICENSE.txt
drwxr-xr-x 2 elasticsearch elasticsearch 4096 Mar 19 00:00 logs
drwxr-xr-x 76 elasticsearch elasticsearch 4096 Oct 12 2023 modules
-rw-r--r-- 1 elasticsearch elasticsearch 2231504 Oct 12 2023 NOTICE.txt
drwxr-xr-x 2 elasticsearch elasticsearch 4096 Oct 12 2023 plugins
-rw-r--r-- 1 elasticsearch elasticsearch 8157 Oct 12 2023 README.asciidoc
在这个目录下创建 data 目录,用来存放 ElasticSearch 的数据:
mkdir data
然后修改 config/elasticsearch.yml
文件,设置如下配置项:
## 集群名字,随意取一个
cluster.name: ulric-es-cluster
## 节点名字,随意取一个,同时在 /etc/hosts 里配置一下 node-1 和本机 IP 对应,后面多机器操作的时候方便
node.name: node-1
## 数据目录
path.data: /home/elasticsearch/elasticsearch-8.10.4/data
## 日志目录
path.logs: /home/elasticsearch/elasticsearch-8.10.4/logs
## 我会在其他机器访问 ElasticSearch,直接把 ElasticSearch 绑定到 0.0.0.0 了
network.host: 0.0.0.0
## 指定初始 master 节点
cluster.initial_master_nodes: ["node-1"]
ElasticSearch 是 Java 写的,设置一下 JVM 堆大小。我这个虚拟机内存不大,设置为 2G。一般来讲,至少设置为 2G,如果只给 1G,稍微一运行内存就不够用。如果是生产环境,建议的内存大小设置为 50% 的物理内存,但是不要超过 32G。这是官方的建议。
在 config/jvm.options.d
下面创建一个 es.options 文件,设置 JVM 堆大小:
cat > config/jvm.options.d/es.options << EOF
-Xms2g
-Xmx2g
EOF
然后就可以启动了,直接运行 bin/elasticsearch
:
bin/elasticsearch -d
其中 -d
是扔到后台运行。ElasitcSearch 8.x 版本默认使用 HTTPS,并且会在 config/certs
目录下生成证书。然后我们就可以使用 curl 做测试了:
curl -s --cacert config/certs/http_ca.crt https://127.0.0.1:9200/_cluster/health | python3 -mjson.tool
{
"error": {
"root_cause": [
{
"type": "security_exception",
"reason": "missing authentication credentials for REST request [/_cluster/health]",
"header": {
"WWW-Authenticate": [
"Basic realm=\"security\" charset=\"UTF-8\"",
"Bearer realm=\"security\"",
"ApiKey"
]
}
}
],
"type": "security_exception",
"reason": "missing authentication credentials for REST request [/_cluster/health]",
"header": {
"WWW-Authenticate": [
"Basic realm=\"security\" charset=\"UTF-8\"",
"Bearer realm=\"security\"",
"ApiKey"
]
}
},
"status": 401
}
这是要求我们提供用户名和密码。我们可以使用下面的命令重置一个:
bin/elasticsearch-reset-password -u elastic
我最终生成的 elastic 的密码是:9wApgqichkT2D75oV*l7
,然后就可以使用 curl 带上用户名和密码了:
curl -s --cacert config/certs/http_ca.crt -u 'elastic:9wApgqichkT2D75oV*l7' https://127.0.0.1:9200/_cluster/health | python3 -mjson.tool
{
"cluster_name": "ulric-es-cluster",
"status": "yellow",
"timed_out": false,
"number_of_nodes": 1,
"number_of_data_nodes": 1,
"active_primary_shards": 64,
"active_shards": 64,
"relocating_shards": 0,
"initializing_shards": 0,
"unassigned_shards": 30,
"delayed_unassigned_shards": 0,
"number_of_pending_tasks": 0,
"number_of_in_flight_fetch": 0,
"task_max_waiting_in_queue_millis": 0,
"active_shards_percent_as_number": 68.08510638297872
}
Kibana 安装
Kibana 我也继续放在 elasticsearch 账号下:
wget https://artifacts.elastic.co/downloads/kibana/kibana-8.10.4-linux-x86_64.tar.gz
tar -zxf kibana-8.10.4-linux-x86_64.tar.gz
然后进入 kibana-8.10.4 下面的 config 目录,修改 kibana.yml
文件:
## 回头我要在其他机器访问 Kibana,所以监听范围大一些
server.host: "0.0.0.0"
## 指定 i18n 的语言,我这里设置为中文
i18n.locale: "zh-CN"
然后进入 bin 目录启动就可以了,我是测试环境,直接使用 nohup 启动:
nohup ./kibana &> stdout.log &
如果进程正常启动,在 elasticsearch 账号下应该有两个进程,一个是 ElasticSearch,一个是 Kibana,使用 ps 检查一下:
ps -u elasticsearch x
应该同时看到 ElasticSearch 和 node 进程,node 就是 Kibana,因为 Kibana 是 NodeJS 写的。
在 Kibana 的日志中可以看到提示的 code:
i Kibana has not been configured.
Go to http://0.0.0.0:5601/?code=335215 to get started.
然后浏览器访问 Kibana 的地址,在 URL 后面加上 code 参数。比如我这个虚拟机的 IP 是 10.129.0.69,那么访问的地址就是:http://10.129.0.69:5601/?code=335215
。
首次访问 Kibana 需要注册令牌,获取令牌的方式有提示,命令为:
bin/elasticsearch-create-enrollment-token --scope kibana
然后就完活了,如果页面一直在等待,可以刷新一下也会进来的。