在我之前的文章 “Elasticsearch:使用 RPM 安装包来安装 Elastic Stack 8.x” 里,我详细地介绍了如何使用 RPM 安装包来安装 Elastic Stack 8.x。在今天的文章中,我来详细描述如何从零开始来创建一个含有三个节点的 Elasticsearch 集群。我们最终实现的是如下的 Elasticsearch 集群。

如上所示,我们有三台运行 CentOS 的机器。它们的 IP 地址分别列在上面。我们将在这些机器上部署最新的 Elastic Stack 8.5.3。
如果你已经有自己的 CentOS 机器,那你就可以直接跳过这个部分。针对没有 CentOS 机器的开发者来说,Vagrant 是一个不错的选择。请参照我之前的教程 “Vagrant 入门教程” 来进行学习。
我们首先在自己的电脑中创建一个目录,并创建如下的一个 Vagrantfile 文件:
Vagrantfile
# vi: set ft=ruby :
ENV['VAGRANT_NO_PARALLEL'] = 'yes'
Vagrant.configure(2) do |config|
config.vm.provision "shell", path: "bootstrap.sh"
config.vm.define "es1" do |es1|
es1.vm.box = "centos/7"
es1.vm.hostname = "es1.example.com"
es1.vm.network "private_network", ip: "172.42.42.10"
es1.vm.provider "virtualbox" do |vb|
vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
vb.name = "es1"
vb.memory = 4096
vb.cpus = 2
end
end
config.vm.define "es2" do |es2|
es2.vm.box = "centos/7"
es2.vm.hostname = "es2.example.com"
es2.vm.network "private_network", ip: "172.42.42.20"
es2.vm.provider "virtualbox" do |vb|
vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
vb.name = "es2"
vb.memory = 2048
vb.cpus = 1
end
end
config.vm.define "es3" do |es3|
es3.vm.box = "centos/7"
es3.vm.hostname = "es3.example.com"
es3.vm.network "private_network", ip: "172.42.42.30"
es3.vm.provider "virtualbox" do |vb|
vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
vb.name = "es3"
vb.memory = 2048
vb.cpus = 1
end
end
end
如上所示,它创建三个 CentOS 的虚拟机。我们分别为它们设置相应的 IP 地址。在上面,它还引用了一个 bootstrap.sh 文件。它是用来帮我们安装一下必要的包及进行相应的配置。它的定义如下:
bootstrap.sh
#!/bin/bash
# Update the system
echo "[TASK 1] Updating the system"
yum update -y >/dev/null 2>&1
# Install desired packages
echo "[TASK 2] Installing desired packages"
yum install -y -q vim redhat-lsb-core net-tools bind-utils >/dev/null 2>&1
# Set up global aliases and exports
echo "[TASK 3] Creating global aliases and functions"
cat >>/etc/bashrc <<EOF
# Generated by Vagrant
alias vi='vim'
alias sudo='sudo '
export EDITOR=vim
export TERM=xterm
# Generated by Vagrant
EOF
echo "colorscheme elflord" >> /etc/vimrc
# Enable password authentication
echo "[TASK 4] Enabling password authentication in sshd config"
sed -i 's/^PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config
systemctl reload sshd
# Disable SELinux
echo "[TASK 5] Disable SELinux"
setenforce 0
sed -i --follow-symlinks 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux
# Set Root password
echo "[TASK 6] Set root password"
echo "admin" | passwd --stdin root >/dev/null 2>&1
# Disable and stop firewalld
echo "[TASK 5] Disable and stop firewalld"
systemctl disable firewalld >/dev/null 2>&1
systemctl stop firewalld
# Update hosts file
echo "[TASK 6] Update /etc/hosts file"
cat >>/etc/hosts<<EOF
172.42.42.10 es1.example.com es1
172.42.42.20 es2.example.com es2
172.42.42.30 es3.example.com es3
EOF
如上所示,它禁用了 firewall,以便机器之间能互相连接。在实际的使用中,这个并不推荐。我们需要通过 iptable 来进行配置。另外在上面,我们为 root 用户创建了一个 admin 的密码。这个在下面的命令中将会被使用。
这样我们目录里的文件就是:
$ pwd
/Users/liuxg/data/elk/elastic8
$ ls
Vagrantfile bootstrap.sh
我们在这个目录下,打入如下的命令:

如果你遇到上面的错误信息,你可以继续使用上面的 vagrant up 命令运行:

如上所示,在更新完系统后,上面的错误信息就不见了。我们需要为 es2 及 es3 重复这个步骤。 等全部安装完毕后,我们可以使用如下的命令来查看:

vagrant status
Current machine states:
es1 running (virtualbox)
es2 running (virtualbox)
es3 running (virtualbox)
This environment represents multiple VMs. The VMs are all listed
above with their current state. For more information about a specific
VM, run `vagrant status NAME`.
上面显示我们的三个虚拟机都已经运行起来了。我们可以在 virtualbox 里进行查看:
上面的安装并没有帮我们安装 Virtualbox Guest Additions。我接着做如下的操作:
vagrant reload


它会在 reload 的过程中自动帮我们安装好 Guest Additions。等安装好后,我们可以直接在 host 里打入如下的命令:
ping 172.42.42.10
$ ping 172.42.42.10
PING 172.42.42.10 (172.42.42.10): 56 data bytes
64 bytes from 172.42.42.10: icmp_seq=0 ttl=64 time=0.416 ms
64 bytes from 172.42.42.10: icmp_seq=1 ttl=64 time=0.654 ms
很显然,在 host 上面,我们可以访问 es1。我们也可以同样测试一下 es2 及 es3。
这样,我们的 CentOS 的安装就已经完成了。
我们可以使用如下的命令来登录已经创建好的 CentOS:
vagrant ssh es1
$ vagrant ssh es1
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
[vagrant@es1 ~]$ hostname
es1.example.com
在上面的一步中,我们在 bootstrap.sh 禁止了 firewall 的使用。针对非虚拟机的开发者来说,你可以登录每个 CentOS 机器后,我们可以通过如下的命令来检查 firewalld 的状态:
systemctl status firewalld
[vagrant@es1 ~]$ systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
上面显示的是 inactive 的状态,这个是因为我们在 bootstrap.sh 里已经做过了。如果你的是 active 的状态,那么你可以使用如下的命令来停止 firewalld
systemctl stop firewalld
systemctl disable firewalld
在上面,我们禁用 firewalld。我们可以再次使用:
systemctl status firewalld
来检查状态。我们按照上面的步骤对三个 CenOS 做同样的操作,确保 firewalld 被禁用。
为了方便安装,我们使用 root 用户来进行操作。我们打入命令 su:
[vagrant@es1 ~]$ su
Password:
[root@es1 vagrant]#
在上面我们输入密码 admin 即可。这个密码是在 bootstrap.sh 里指定的。
Elastic 使用带有指纹的 Elasticsearch 签名密钥(PGP 密钥 D88E42B4,可从 https://pgp.mit.edu 获得)对所有的包进行签名:
4609 5ACC 8548 582C 1A26 99A9 D27D 666C D88E 42B4
下载并安装公共签名密钥:
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
在 /etc/yum.repos.d/ 目录中为基于 RedHat 的发行版创建两个名为 elasticsearch.repo 及 elastic.repo 的文件,或在 /etc/zypp/repos.d/ 目录中为基于 OpenSuSE 的发行版创建一个文件,其中包含:
elasticsearch.repo
[elasticsearch]
name=Elasticsearch repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md
elastic.repo (在 es2 及 es3 上可不创建)
[elastic-8.x]
name=Elastic repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
[root@es1 yum.repos.d]# pwd
/etc/yum.repos.d
[root@es1 yum.repos.d]# cat elastic.repo
[elastic-8.x]
name=Elastic repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
我们接下来使用如下的命令来安装 Elasticsearch:
sudo yum install --enablerepo=elasticsearch elasticsearch



在安装的过程中,它会显示 elastic 超级用户的密码。我们可以把这个密码记下来。
我们接下来配置 CentOS 启动后,自动启动 Elasticsearch 服务。打入如下的命令:
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service
我们为 es2 及 es3 做同样的操作。
等我们把 Elasticsearch 在所有的机器上安装好以后,我们在第一个机器 es1 上安装 Kibana:
yum install kibana
同样,我们需要需要运行如下命令来使得 Kibana 在机器重新启动时自动运行:
systemctl daemon-reload
systemctl enable kibana
至此,我们的安装步骤已经完成。我们接下来需要来进行一些配置。
我们先对 es1 机器进行配置。我们通过如下的命令可以查看当前机器的 IP 地址:
ip addr
或者如下的命令:
ifconfig | grep inet
[root@es1 yum.repos.d]# ifconfig | grep inet
inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255
inet6 fe80::5054:ff:fe4d:77d3 prefixlen 64 scopeid 0x20<link>
inet 172.42.42.10 netmask 255.255.255.0 broadcast 172.42.42.255
inet6 fe80::a00:27ff:fede:461f prefixlen 64 scopeid 0x20<link>
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
我们接下来配置 elasticsearch.yml 文件:
/etc/elasticsearch/elasticsearch.yml
我们首先修改 cluster.name 为我们喜欢的名称:




保存好文件,我们接着使用如下的命令来启动 Elasticsearch:
systemctl start elasticsearch
我们可以通过如下的方法来查看 elasticsearch 服务的日志:
journalctl -u elasticsearch
[root@es1 elasticsearch]# journalctl -u elasticsearch
-- Logs begin at Tue 2022-12-13 01:04:47 UTC, end at Tue 2022-12-13 02:51:23 UTC. --
Dec 13 02:50:39 es1.example.com systemd[1]: Starting Elasticsearch...
Dec 13 02:51:23 es1.example.com systemd[1]: Started Elasticsearch.
如果我们想看更详细的日志,我们可以使用如下的命令:
tail -f /var/log/elasticsearch/liuxg.log
记得这里的 liuxg 是我的 cluster 的名字。在上面的 elasticsearch.yml 中定义的。如果在任何时候我们修改 elasticsearch.yml 文件,那么我们需要使用如下的命令来重新启动 elasticsearch:
systemctl restart elasticsearch.service
一旦 Elasticsearch 被成功地启动,我们可以在 es1 的 terminal 中打入如下的命令来查看:
curl -k -u elastic:xW4lz=-LeMspuQpTX0jz https://es1:9200
[root@es1 vagrant]# curl -k -u elastic:xW4lz=-LeMspuQpTX0jz https://es1:9200
{
"name" : "node-1",
"cluster_name" : "liuxg",
"cluster_uuid" : "lMsFhaLaSaKpd_hTCOJpVg",
"version" : {
"number" : "8.5.3",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "4ed5ee9afac63de92ec98f404ccbed7d3ba9584e",
"build_date" : "2022-12-05T18:22:22.226119656Z",
"build_snapshot" : false,
"lucene_version" : "9.4.2",
"minimum_wire_compatibility_version" : "7.17.0",
"minimum_index_compatibility_version" : "7.0.0"
},
"tagline" : "You Know, for Search"
}
上面显示 elasticsearch 正常。我们也可以使用如下的命令来查看有几个 nodes:
curl -k -u elastic:xW4lz=-LeMspuQpTX0jz https://es1:9200/_cat/nodes
[root@es1 vagrant]# curl -k -u elastic:xW4lz=-LeMspuQpTX0jz https://es1:9200/_cat/nodes
172.42.42.10 19 94 1 0.00 0.03 0.05 cdfhilmrstw * node-1
上面的命令显示它只有一个节点。名称为 node-1。
我们接下来使用如下的命令来生成一个 enrollment token:
/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node
[root@es1 vagrant]# /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node
eyJ2ZXIiOiI4LjUuMyIsImFkciI6WyIxNzIuNDIuNDIuMTA6OTIwMCJdLCJmZ3IiOiJhYjY0MzI2MjE3NzVhY2NiZDk5MDEwYzgyYzg2OTcyODQwNGQyMDFiNjk5NDdjMWZlOTYxNWYwNGNhMTI1NTk0Iiwia2V5Ijoic0ctSUNZVUIzQWIyNm5TMnVCT1g6Ym45R0JRQWFRUjJHd2JHVWc0Y2xZUSJ9
我们把这个 enrollment token 拷贝下来。
我们接下来先不需要针对 es2 及 es3 的节点的 Elasticsearch 的配置文件做任何的修改。我们在它们的 teminal 中打入如下的命令:
/usr/share/elasticsearch/bin/elasticsearch-reconfigure-node --enrollment-token <enrollment-token>
/usr/share/elasticsearch/bin/elasticsearch-reconfigure-node --enrollment-token eyJ2ZXIiOiI4LjUuMyIsImFkciI6WyIxNzIuNDIuNDIuMTA6OTIwMCJdLCJmZ3IiOiJhYjY0MzI2MjE3NzVhY2NiZDk5MDEwYzgyYzg2OTcyODQwNGQyMDFiNjk5NDdjMWZlOTYxNWYwNGNhMTI1NTk0Iiwia2V5Ijoic0ctSUNZVUIzQWIyNm5TMnVCT1g6Ym45R0JRQWFRUjJHd2JHVWc0Y2xZUSJ9
请用你自己的 token 替换上面的 enrollment-token 值。
[root@es2 yum.repos.d]# /usr/share/elasticsearch/bin/elasticsearch-reconfigure-node --enrollment-token eyJ2ZXIiOiI4LjUuMyIsImFkciI6WyIxNzIuNDIuNDIuMTA6OTIwMCJdLCJmZ3IiOiJhYjY0MzI2MjE3NzVhY2NiZDk5MDEwYzgyYzg2OTcyODQwNGQyMDFiNjk5NDdjMWZlOTYxNWYwNGNhMTI1NTk0Iiwia2V5Ijoic0ctSUNZVUIzQWIyNm5TMnVCT1g6Ym45R0JRQWFRUjJHd2JHVWc0Y2xZUSJ9
This node will be reconfigured to join an existing cluster, using the enrollment token that you provided.
This operation will overwrite the existing configuration. Specifically:
- Security auto configuration will be removed from elasticsearch.yml
- The [certs] config directory will be removed
- Security auto configuration related secure settings will be removed from the elasticsearch.keystore
Do you want to continue with the reconfiguration process [y/N]y
我们在 es2 的 terminal 中启动 elasticsearch 服务:
systemctl start elasticsearch
我们通过如下的命令来查看它的运行状态:
systemctl status elasticsearch
[root@es2 yum.repos.d]# systemctl status elasticsearch
● elasticsearch.service - Elasticsearch
Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2022-12-13 03:55:15 UTC; 26s ago
Docs: https://www.elastic.co
Main PID: 15827 (java)
CGroup: /system.slice/elasticsearch.service
├─15827 /usr/share/elasticsearch/jdk/bin/java -Xms4m -Xmx64m -XX:+UseSeri...
├─15891 /usr/share/elasticsearch/jdk/bin/java -Des.networkaddress.cache.t...
└─15911 /usr/share/elasticsearch/modules/x-pack-ml/platform/linux-x86_64/...
Dec 13 03:54:20 es2.example.com systemd[1]: Starting Elasticsearch...
Dec 13 03:55:15 es2.example.com systemd[1]: Started Elasticsearch.
很显然它处于运行状态。我们在 es1 的 terminal 中打入如下的命令来查看 nodes 的情况:
curl -k -u elastic:xW4lz=-LeMspuQpTX0jz https://es1:9200/_cat/nodes
[root@es1 vagrant]# curl -k -u elastic:xW4lz=-LeMspuQpTX0jz https://es1:9200/_cat/nodes
172.42.42.10 5 94 0 0.02 0.04 0.05 cdfhilmrstw * node-1
[root@es1 vagrant]#
很显然,它还是一个单独的 node。那为啥新的节点 es2 没有加入到已有的集群呢?
我们需要针对 es2 上的 elasticsearch.yml 进行一些配置:
/etc/elasticsearch/elasticsearch.yml


修改完后,我们需要重新启动 Elasticsearch:
systemctl restart elasticsearch
使用如下的命令来查看它的运行状态:
systemctl status elasticsearch
[root@es2 yum.repos.d]# systemctl status elasticsearch
● elasticsearch.service - Elasticsearch
Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2022-12-13 04:04:20 UTC; 37s ago
Docs: https://www.elastic.co
Main PID: 16015 (java)
CGroup: /system.slice/elasticsearch.service
├─16015 /usr/share/elasticsearch/jdk/bin/java -Xms4m -Xmx64m -XX:+UseSeri...
├─16079 /usr/share/elasticsearch/jdk/bin/java -Des.networkaddress.cache.t...
└─16099 /usr/share/elasticsearch/modules/x-pack-ml/platform/linux-x86_64/...
Dec 13 04:03:54 es2.example.com systemd[1]: Stopped Elasticsearch.
Dec 13 04:03:54 es2.example.com systemd[1]: Starting Elasticsearch...
我们可以在 es1 的 log 里看到如下的信息:

我们再次在 es1 的 terminal 中打入如下的命令:
curl -k -u elastic:xW4lz=-LeMspuQpTX0jz https://es1:9200/_cat/nodes
[root@es1 vagrant]# curl -k -u elastic:xW4lz=-LeMspuQpTX0jz https://es1:9200/_cat/nodes
172.42.42.10 46 95 1 0.00 0.04 0.05 cdfhilmrstw * node-1
172.42.42.20 29 95 3 0.18 0.29 0.21 cdfhilmrstw - node-2
很显然,这个时候,我们看到了两个节点:node-1 及 node-2。
如法炮制,我们需要针对 es3 做同样的配置。只不过我们需要为它取另外一个名字 node-3。我们也需要把它的 IP 地址填入进去。


修改完毕后,重新启动 Elasticsearch:
systemctl restart elasticsearch
我们在 es1 的日志信息中可以看到如下的输出:

可以看到 node-3 已经添加进入到已有的集群中了。
我们再次使用如下的命令来查看节点:
curl -k -u elastic:xW4lz=-LeMspuQpTX0jz https://es1:9200/_cat/nodes
[root@es1 vagrant]# curl -k -u elastic:xW4lz=-LeMspuQpTX0jz https://es1:9200/_cat/nodes
172.42.42.30 65 94 6 0.33 0.29 0.14 cdfhilmrstw - node-3
172.42.42.20 63 95 0 0.02 0.08 0.13 cdfhilmrstw - node-2
172.42.42.10 6 95 0 0.09 0.05 0.05 cdfhilmrstw * node-1
很显然,我们已经得到了3个节点的集群。
我们也可以在浏览器中进行访问:

我们在上面的界面中打入 thisisunsafe 字母,然后我们可以看到界面:
我们可以看到如上所示的输出。
在上面,我们还没有启动 Kibana。为了能够让 Kibana 被外网所访问,我们需要对 Kibana 做如下的配置:
/etc/kibana/kibana.yml

我们可以使用如下的命令来进行启动:
systemctl start kibana
我们使用如下的命令来查看它运行的日志信息:
journalctl -u kibana

如上所示,我们可看到让我们去启动 Kibana 的链接。我们在浏览器中输入地址:http://172.42.42.10:5601/?code=203501

在上面,它要求我们填入一个 enrollment token。我们可以在 es1 的 terminal 下输入如下的命令:
/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
[root@es1 elasticsearch]# /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
eyJ2ZXIiOiI4LjUuMyIsImFkciI6WyIxNzIuNDIuNDIuMTA6OTIwMCJdLCJmZ3IiOiJhYjY0MzI2MjE3NzVhY2NiZDk5MDEwYzgyYzg2OTcyODQwNGQyMDFiNjk5NDdjMWZlOTYxNWYwNGNhMTI1NTk0Iiwia2V5Ijoic21fQkNZVUIzQWIyNm5TMlpCTVc6Tm9oOGJaZGtSNmlSZGFqWXBHS2NrZyJ9
把上面的 token 拷贝下来,并粘贴到上面的输入框中。

在上面,我们输入超级用户 elastic 的密码:


这样我们就进入到 Kibana 的界面了。我也可以在 console 中查看 nodes 的情况:

在上面的配置中,Kibana 的访问是以 HTTP 的形式来访问的。我们可以为 Kibana 也配置 HTTPS 的访问。首先,我们先卸载之前安装的 Kibana。然后再重新安装一遍。
yum remove kibana
我们同时确保不留下任何的之前安装的文件:
rm -rf /etc/kibana/
我们再次安装 Kibana:
yum install kibana
我 Kibana 自动启动配置:
systemctl daemon-reload
systemctl enable kibana
我们进入到 Kibana 的安装目录中 /etc/kibana,并打入如下的命令来生成一个证书:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365

对生成的证书文件修改权限:
chmod 777 cert.pem
chmod 777 key.pem
[root@es1 kibana]# pwd
/etc/kibana
[root@es1 kibana]# ls
cert.pem key.pem kibana.keystore kibana.yml node.options
[root@es1 kibana]# chmod 777 cert.pem
[root@es1 kibana]# chmod 777 key.pem
我们接下来需要针对 kibana.yml 文件进行配置:
/etc/kibana/kibana.yml


elasticsearch.hosts: ["https://172.42.42.10:9200"]
elasticsearch.username: "kibana_system"
elasticsearch.password: "r67=Q_o*9GhuuoEpyL*+"
server.ssl.enabled: true
server.ssl.certificate: /etc/kibana/cert.pem
server.ssl.key: /etc/kibana/key.pem
server.ssl.keyPassphrase: "123456"
elasticsearch.ssl.verificationMode: none
我们可以通过如下的命令来设置 kibana_system 密码:
/usr/share/elasticsearch/bin/elasticsearch-reset-password -u kibana_system
[root@es1 vagrant]# /usr/share/elasticsearch/bin/elasticsearch-reset-password -u kibana_system
This tool will reset the password of the [kibana_system] user to an autogenerated value.
The password will be printed in the console.
Please confirm that you would like to continue [y/N]y
Password for the [kibana_system] user successfully reset.
New value: r67=Q_o*9GhuuoEpyL*+
我们使用如下的命令来启动 kibana:
systemctl start kibana
我们可以使用如下的命令来检查 kibana 的服务状态:
systemctl status kibana
[root@es1 kibana]# systemctl status kibana
● kibana.service - Kibana
Loaded: loaded (/usr/lib/systemd/system/kibana.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2022-12-13 05:14:09 UTC; 49s ago
Docs: https://www.elastic.co
Main PID: 17285 (node)
CGroup: /system.slice/kibana.service
└─17285 /usr/share/kibana/bin/../node/bin/node /usr/share/kibana/bin/../s...
我们通过如下的方式来查看 Kibana 的日志:
tail -f /var/log/kibana/kibana.log

我们在浏览器中来访问 Kibana:
在上面的界面中打入 thisisunsafe 字母:
在上面打入超级用户 elastic 的密码。你就可以进入到 Elasticsearch 了。


出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在
exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby中使用两个参数异步运行exe吗?我已经尝试过ruby命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何rubygems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除
鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende
我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e
如何使用RSpec::Core::RakeTask初始化RSpecRake任务?require'rspec/core/rake_task'RSpec::Core::RakeTask.newdo|t|#whatdoIputinhere?endInitialize函数记录在http://rubydoc.info/github/rspec/rspec-core/RSpec/Core/RakeTask#initialize-instance_method没有很好的记录;它只是说:-(RakeTask)initialize(*args,&task_block)AnewinstanceofRake