欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

ELK浅入浅出之环境搭建

时间:2023-04-20

历时2天,搞出了ELK的环境搭建,特此记录一下避免后来人踩坑。

1.前置操作

yum install -y wgetyum install -y java-11-openjdk.x86_64

2.安装elasticsearch

# 切换到opt目录cd /opt# 下载elasticsearch安装包wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.0.0-linux-x86_64.tar.gz# 解压缩安装包tar -zxvf elasticsearch-8.0.0-linux-x86_64.tar.gz# 启动elasticsearch./elasticsearch-8.0.0/bin/elasticsearch

这时我还使用的root账号在操作,启动会报错,说elasticsearch不能以root权限来运行。

行吧,我们来创建一个用于elk的用户

# 创建elk组group add elk# 为elk组创建一个elk用户useradd elk -g elk# 重置用户密码passwd elk#将opt目录的权限授权给elk用户chown -R elk:elk /opt

 不能用root那咱就用elk用户启动吧

# 切换成elk用户su elk# 再次启动elasticsearch./elasticsearch-8.0.0/bin/elasticsearch

 嗯嗯,这次启动成功了。

3.部署logstash

# 下载logstash安装包wget https://artifacts.elastic.co/downloads/logstash/logstash-8.0.0-linux-x86_64.tar.gz# 解压缩安装包tar -zxvf logstash-8.0.0-linux-x86_64.tar.gz# 改改logstash-sample.confvim logstash-8.0.0/config/logstash-sample.conf# 测试启动logstash./logstash-8.0.0/bin/logstash -f logstash-8.0.0/config/logstash-sample.conf

改过的logstash-sample.conf

input { beats { port => 5044 } tcp { mode => "server" port => 4567 codec => json_lines }}output { elasticsearch { hosts => ["http://localhost:9200"] index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}" #user => "elastic" #password => "changeme" }}

 出现了报错:Attempted to resurrect connection to dead ES instance, but got an error {:url=>"http://localhost:9200/", :exception=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError, :message

=>"Elasticsearch Unreachable: [http://localhost:9200/][Manticore::ClientProtocolException] localhost:9200 failed to respond"}。我心想我es服务还正常呢,咋就dead ES instance了。

咱也不能听信logstah的一面之词,看看es的日志

received plaintext http traffic on an https channel, closing connection Netty4HttpChannel

再查查这是什么原因导致的,已经有朋友给出了解决方案

改完再重启。嗯,虽然依然报错,但是变成了另外一种错误。

Attempted to resurrect connection to dead ES instance, but got an error {:url=>"http://localhost:9200/", :exception=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::BadResponseCodeError, :message

=>"Got response code '401' contacting Elasticsearch at URL 'http://localhost:9200/'"}

显示我401,原来8.0.0版本的elasticsearch默认是需要认证了,好吧。加上认证信息,修改完

input { beats { port => 5044 } tcp { mode => "server" port => 4567 codec => json_lines }}output { elasticsearch { hosts => ["http://localhost:9200"] index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}" user => "elastic" password => "mjQgmfQlMuxmGlYI5F1H" }}

ok,这次启动成功了。

或者跳过认证

4.部署kibana

# 下载kibana安装包wget https://artifacts.elastic.co/downloads/kibana/kibana-8.0.0-linux-x86_64.tar.gz# 解压缩安装包tar -zxvf kibana-8.0.0-linux-x86_64.tar.gz# 修改kibana配置文件vim kibana-8.0.0/config/kibana.yml# 启动kibana./kibana-8.0.0/bin/kibana

 出现了问题Kibana should not be run as root、Use --allow-root to continue。kibana默认也不以root身份启动,还好我们早先创建了elk用户。

# 切换成elk用户su elk# 再次启动kibana./kibana-8.0.0/bin/kibana

出现了错误。Error: Unable to write to UUID file at /opt/kibana-8.0.0/data/uuid、Ensure Kibana has sufficient permissions to read / write to this file、Error was: EACCES

小问题,使用root身份重新给elk用户授权一下,搞定!

又来了一个小问题

Unable to retrieve version information from Elasticsearch nodes、security_exception: [security_exception] Reason: missing authentication credentials for REST request [/_nodes?filter_path=nodes.*.version%2Cnod
es.*.http.publish_address%2Cnodes.*.ip]

 因为elasticsearch开启的安全认证,导致kibana必须配置账号密码才能连接elasticsearch。

这个过程可太痛苦了,网上一群人在胡说,提议关闭安全认证,堪称天才。

那我就想使用elastic用户的账号和密码,发现行不通。系统不让用,那就翻翻官网吧。能咋办呢

 终于功夫不负有心人,在官网找到了关于elasticsearch的内置角色的解释,为我们通向成功提供了一把钥匙。

 提到了一个内置用户kibana_system用于kibana连接elasticsearch使用。此时,我知道我们离真相不远了。

但是我们还不知道kibana_system的密码,不过没关系,没有密码咱就重置密码

# 重置kibana_system密码bin/elasticsearch-reset-password --username kibana_system

 再度配置kibana.yml,成了!

 最终的kibana.yml

server.port: 5601server.host: "0.0.0.0"elasticsearch.hosts: ["http://localhost:9200"]elasticsearch.username: "kibana_system"elasticsearch.password: "ebblH2rFclzqlNdwC5Ou"

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。