我们在搭建ELK环境的时候,一般有三种选择。
1、本地安装,你可以到官网把安装包下载下来然后解压,修改配置文件,然后启动,这样比较麻烦,比较考验操作。那有的玩家就要问了,这种操作太吃手感了,有没有比较容易上手的玩法。有的有的,这样的玩法还有两种。
2、容器启动,这就很简单了,拉取镜像,启动容器,都是一键操作的。
3、Elastic cloud,es的官网提供了云服务,你可以注册账号上去直接用,但是免费时间只有14天,后面就得花钱了。当然你可以再找个新账号。这种是最方便的,但是有时间限制。
我们这里重点来说容器启动,首先你确保你的环境上有docker了,不然白扯。
一、拉取镜像
我们先去docker hub上看一下我们要安装的组件的镜像是不是存在,我们先来操作kibana,所以我们直接搜索kibana就可以了。
我们点进去就看到官方发布的镜像的各个版本以及他的其他信息了。
好的,那我们来拉取kibana的镜像。
我们使用docker pull kibana来拉取镜像的时候,因为你没指定拉取的哪个版本,,所以他会默认去拉取latest的这个版本,而docker hub上没有这个版本号,所以失败了,那我们就指定一个版本,注意你指定的版本一定是docker hub上存在的,不然你还是会失败。本次我们使用8.4.3这个版本,其余的8的版本也差不多,你可以随便找一个。我们看到docker hub上是有这个8.4.3版本的。
我们把命令改为docker pull kibana:8.4.3
ok,此时我们拉取成功了,同样的,我们还需要elasticsearch(简称es)的镜像,而且要注意,es和kibana的版本要保持一致。
命令自然是docker pull elasticsearch:8.4.3,不出意外的话,这个也是可以拉取下来的。
二、创建网络
我们现在有了镜像,在我们启动容器之前我们需要创建一个docker网络,用于在容器之间通信,这个网络是独立于你宿主机的网络的,他是虚拟的。
其命令就是docker network create 网络名称,我们创建一个docker network create myElkNetwork,他会返回一个网络的唯一标识id,我们这里是38ac953be25f6ad9de506d476c6d80abb43fcdd47c0e0668aa6fc608be4d6da2,实际上没啥用,就是看看有就行。
三、启动容器
我们以单节点最小化的方式启动容器,至于那些命令的详细细节我就不说了,可以看看docker的命令。
shell
docker run -d --name myes01 --net myElkNetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:8.4.3
这样我们就启动了这个es容器,他的名字叫myes01。
没有问题,我们可以在浏览器访问一下es的api,然后确定他是不是真的启动成功了。
同样的,我们继续启动kibana:
shell
docker run -d --name myKibana01 --net myElkNetwork -p 5601:5601 kibana:8.4.3
至此我们启动完成了,我们只需要去浏览器打开localhost:5601来确认kibana是不是启动成功即可。
ok,你会发现他让你输入token 令牌,容器安装就是这样的,你如果本地化安装就没这个问题,我们怎么获取这个token呢。注意,你的这个令牌是kibana访问es的,所以你要去es的容器中去找。你要进入es容器来为kibana生成token。因为es8.x是默认开启密码校验模式的。
我们进入es容器。docker exec -it 容器id /bin/bash
你可以看到他有一个生成token的命令,我们运行这个命令看下。
报错了,是因为es内部生成token是要区分是给kibana的还是给es集群的。因为这是两种不同访问方式。所以我们要加上-s "kibana"。
ok,此时我们就拿到了这个token,贴到kibana的ui界面上看下。
弹出这个界面,
他让你去kibana的服务上运行bin/kibana-verification-code这个指令,没说的,我们继续进入kibana容器。
于是我们就生成了这个code,可以正式开启kibana的使用了,是吗,真的可以了吗。
在你完成了检验之后,你还要输入密码,这很正常,token check和密码账户本来也不一定就是一起的。继续做吧骚年。注意,这个账户密码是你访问es的,所以你需要去es那边,但愿你还没有退出你的es容器。我们继续进入到es容器你会看到这个命令。
ok,这就是你要执行的。我们来看下他的参数。
markdown
elasticsearch@3046fce9312e:~/bin$ elasticsearch-reset-password -h
Resets the password of users in the native realm and built-in users.
Option (* = required) Description
--------------------- -----------
-E <KeyValuePair> Configure a setting
-a, --auto
-b, --batch
-f, --force Use this option to force execution of the command
against a cluster that is currently unhealthy.
-h, --help Show help
-i, --interactive
-s, --silent Show minimal output
* -u, --username The username of the user whose password will be reset
--url the URL where the elasticsearch node listens for
connections.
-v, --verbose Show verbose output
~~
首先-u是带星号的,一定要加,他的作用是标识你要给哪个账户重置密码,在es启动的时候他会默认创建一个叫做elastic的账户。我们就用这个。
-i 一般也要加上,因为他表示交互式,所谓交互式就是你可以和服务对话,他会提醒你要不要创建,创建啥你输入,不然es自己给你生成哪个密码很抽象,你记不住的。
所以我们的命令就是 elasticsearch-reset-password -u elastic -i
此时我们真的完成了最后一步。登陆吧骚年。
完美进入。你发现了吧,很几把麻烦,尤其是集群会更麻烦,后面我会写一篇集群如何部署的文档。
注意,你之后启动容器就直接run就好,别删了重新启动一个新的,这样你还要再来一遍。
至于如果你使用elastic cloud的话,那会方便的多得多,但是只有14天,后面要收费,很贵的哦。