〇、前言

常规rpm等部署elk 7.8.0的方式已经试过了,在之前的一篇博文里,不多说了。
https://blog.csdn.net/festone000/article/details/123331742

注意这里说的不是elk是最新版本的elk,即8.1.0,不是以前的 7.x或者更早的版本。

以前的elk部署好了直接启动就能用(默认安全验证没有启用),现在8.x的麻烦一些,多了一些安全性,于是就很麻烦了,比如想用logstash按照以往的方式,往es里面导入数据,结果不允许。

其实玩多了领悟到了,什么“常规部署”,什么“docker部署”,其实都一样。
无非就是常规部署,可以直接改配置文件,启动服务,停止服务等。
docker部署,可以通过-v参数映射配置文件,其实也就相当于改了配置文件。
领会到了就够了,其他都一样。

特别补充一下,本机不用安装java环境,即jdk之类的,elk自带有。搜索目录即知。


一、8.x 与 之前的(如7.x)的不同

就我目前学习研究的情况来看,差别还是挺大的,学起来压力不小。
如非必要,不如还是直接用7.x 来得快,如果你不想要最新版本里的那些花里胡哨的功能特性的话。
但是7.x以及更早的某些版本,有log4j漏洞。具体自己看,见下方链接。

https://hub.docker.com/_/elasticsearch?tab=tags&page=1&name=7.

8.x增强了安全性。

只说我目前感受到的

如之前在机器上分别安装了es,启动后,则可直接通过网页访问到,如下图。
在这里插入图片描述
kibana同理,也可以直接通过网页访问,图略。
即以前直到地址和端口,直接就可以访问到。
现在的es安装,启动,通过浏览器也无法访问到了,如下图。
在这里插入图片描述
但通过https方式还是可以。如 https://192.168.182.150:9200
但浏览器可能会提示证书问题,因为这个证书是“不可靠”的机构颁发的。

所以安装了es 8.x,启动后网页上看不到不要觉得是出问题了

kibana倒是还可以访问到,但上来就需要输入一些token之类的东西,如下图。
在这里插入图片描述
这些token、密码、验证码之类的东西输入完成后最终是可以访问的。

这些token、密码、验证码之类的东西哪里来的呢?
可以用es的 bin/目录下的 bin/elasticsearch* 等工具产生。

多了不少新概念,不少学习成本

多了 fleet、integration、agent等好几个新概念,有的学了,挺迷惑的。

其中integration我觉得是很重要的,集成多种功能。

甚至目前看来我觉得logstash可能都不需要存在了(这句待考,只是猜测,不确定)。

二、如何部署

如果是容器安装,直接取最新镜像,docker run xxx......就行。
如果是rpm,就直接安装最新rpm,rpm -ivh xxx.rpm

1. es

https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html

docker pull elasticsearch:8.1.0

docker run --name es01 -p 9200:9200 -p 9300:9300 -it elasticsearch:8.1.0

注意上面已经说过了,如果浏览器访问9200失败不见得是你es启动失败了,只是现在加了安全相关的内容。

其实此时如果我们启动es时不是后台启动的话,即我们可以看到容器的控制台输出,每当我们刷新一下浏览器重新发起一次请求,如http://1.1.1.1:9200的话,就会在控制台看到变化信息。
这也就证明了es其实是启动成功了的。
如下图.
在这里插入图片描述

2. kibana

2.1 安装,启动

docker pull kibana:8.1.0

docker run -d --name kibana --net somenetwork -p 5601:5601 kibana:8.1.0

在这里插入图片描述

2.1.5 暂不使用logstash

2.2 登入?

然后就会成功。
接下来就会惊喜地发现,进不去—怎么跟7.x差别这么大?!

如下图
在这里插入图片描述
前面已经说过了,如下图。
在这里插入图片描述
./elasticsearch-create-enrollment-token 命令即可产生token。

2.3 进入kibana

在这里插入图片描述

2.4 进入登录页

在这里插入图片描述
蛤? 还有个登录页?
我哪里知道账号啊(哭)?

用户名产生同token。
./elasticsearch-users useradd zhangsan -r superuser

当然,默认有个超级用户 elastic是用户名,密码在早期启动es的时候控制台或日志有输出。
形如:
在这里插入图片描述

2.5 蛤?还有验证码?

下面看到另一个惊喜。
在这里插入图片描述
验证码在kibana里面产生
/usr/share/kibana/bin/kibana-verification-code

如果是容器方式的话,我们可以使用docker exec -it 命令进入容器。
如:
docker exec -it containerId /bin/bash
然后执行图中浅紫色内容。
得到如图。
在这里插入图片描述
填入验证码,登录成功。

自此,就可以在kibana中疯狂操作了。

三、其他

发现里面不得不学习很多新东西,如什么 fleet agent之类,有点困扰,先记录一下。
在这里插入图片描述

四、感想 (此节建议跳过)

这一部分只是当时为了通过https方式,用logstash读取mysql数据向es写入数据的时候的以一些记录。
搜索无数问题,尝试各种可能,最终当时也没有成功(最后成功了,但不在这节)
比如es关闭安全验证,则logstash就不需要配置 ssl 证书了,可以成功
比如使用openssl自己产生证书,然后es,logstash中配置(当时未成功)
等等。

关于logstash的使用


logstash 的官方文档,docker方式部署logstash
下载:
https://www.elastic.co/cn/downloads/logstash

启动
https://www.elastic.co/guide/en/logstash/current/docker.html

使用具体的配置
https://www.elastic.co/guide/en/logstash/current/docker-config.html

连接失败
https://blog.csdn.net/shen198623/article/details/123045793

docker方式启动如图:
在这里插入图片描述
在这里插入图片描述

 docker run --rm -it 
 -v /docker/logstash/xtcrm-logstash.yml:/usr/share/logstash/config/logstash.conf 
 -v /etc/logstash.yml:/usr/share/logstash/config/logstash.yml 
 -v /docker/logstash-bin/mysql-connector-java-5.1.45.jar:/usr/share/logstash/mylib/5.1.45/mysql-connector-java-5.1.45.jar --network elastic --name logstash02 logstash:8.1.0

注意体会一下三个-v的含义

其他小工具

查看docker容器的IP地址

docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

五、在es开启安全验证的情况下,logstash写入es

开启了所谓的什么安全验证之后,kibana是可以连接和访问es的,没有明显问题。
但logstash我试了无数次,无数种情况,也没有成功,彻底心累了,暂时放弃。

还可能涉及到对密码学方面的理解,
如:

1.自己产生一个证书机构
2. 自己产生一个证书
3.把这个证书给别人用。。。
暂时不够理解,一直没成功,以后再说。


学习了一些ssl相关的知识之后,理解了一些东西,帮助我解决了问题。
https://blog.csdn.net/festone000/article/details/123520381

最终我还是成功了。

需要自己使用openssl生成证书并配置吗?
不用!!!(历经千辛万苦的结论)

办法:

es

正常开始验证,也就是默认的样子
在这里插入图片描述
由于elasticsearch.yml中配置了使用http.p12等证书,所以一般的请求,它是拒不接受的。
也即logstash难以将数据写入es。
这是个大难题。

kibana

kibana可以正常访问和操作es,一切正常。
不过kibana需要用户名和密码登录,合情合理。

logstash

  1. 将es目录中的http_ca.crt证书拷贝到logstash的目录下。用于配置给logstash使用。

如:
mkdir /etc/logstash/ssl
co /etc/elasticsearch/cert/http_ca.crt /etc/ /etc/logstash/ssl

然后建立
一个文件,准备读取mysql的test1表。
假如命名就定为 my-test1-logstash.conf
内容如下:
在这里插入图片描述

1 input {
  2         jdbc {
  3                 jdbc_driver_library => "/usr/share/logstash/lib/5.1.45/mysql-connector-java-5.1.45.jar"
  4                 jdbc_driver_class => "com.mysql.jdbc.Driver"
  5                 jdbc_connection_string => "jdbc:mysql://1.1.1.1:13308/test?characterEncoding=UTF-8&useSSL=false"
  6                 jdbc_user => root
  7                 jdbc_password => 123456
  8                 jdbc_paging_enabled => "true" #是否进行分页
  9                 # jdbc_page_size => "50000"
 10                 tracking_column => "id"
 11                 use_column_value => true
 12                 # statement_filepath => "sql文件路径,与下面的执行语句二选1"
 13                 statement => "SELECT * FROM test1 where id > 0 "
 14                 # 设置监听间隔  各字段含义(由左至右)秒、分、时、天、月、年,全部为*默认含义为每分钟都更新
 15                 # schedule => " 10 * * * * *"
 16                 schedule => "5 * * * * *"
 17         }
 18 }
 19 output {
 20         elasticsearch {
 21                 document_id => "%{id}"
 22                 # document_type => ""
 23                 index => "mysql-test1-index"
 24                 hosts => ["https://192.168.182.151:9200"]
 25                 cacert => "/etc/logstash/ssl/http_ca.crt"
 26                 user => "zhangsan"
 27                 password => "123456"
 28         }
 29         stdout{
 30                 codec => rubydebug
 31         }
 32 }

然后启动命令:
sudo /usr/share/logstash/bin/logstash -f /etc/logstash/my-test1-logstash.conf --path.settings=/etc/logstash
然后静等启动。
再然后就激动地发现,logstash从mysql中读取成功,以https方式写入es也成功了!

上个图:
在这里插入图片描述
自此,总算是打通了https方式下的 logstash ==> es ⇒ kibana 路线,感觉不错。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐