〇、前言
常规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 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
- 将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
路线,感觉不错。