目录
一、简介
二、部署elasticsearch
2.1 安装jdk11(jdk版本>=11)
2.2 下载安装包
2.3 授权elk用户
2.4 配置elasticsearch.yml
2.5 启动elasticsearch
三、部署logstash
3.1 启动测试
3.2 可能出现的报错
3.3 指定配置文件启动logstash
3.4 安装Elasticsearch Head
3.4.1 安装谷歌插件
3.4.2 安装nodejs
四、部署kibana
4.1 修改配置文件并启动
一、简介
ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件,但并非全部。
框架 | 简介 | 作用 |
Elasticsearch | 开源分布式搜索引擎,提供存储、分析、搜索功能。特点:分布式、基于reasful风格、支持海量高并发的准实时搜索场景、稳定、可靠、快速、使用方便等。 | 接收搜集的海量结构化日志数据,并提供给kibana查询分析 |
Logstash | 开源日志搜集、分析、过滤框架,支持多种数据输入输出方式。 | 用于收集日志,对日志进行过滤形成结构化数据,并转发到elasticsearch中 |
Kibana | 开源日志报表系统,对elasticsearch以及logstash有良好的web页面支持 | 对elasticsearch提供的数据进行分析展示 |
应用场景:分布式部署项目,需要收集日志、微服务架构项目,收集各个服务的日志、大数据行业。
二、部署elasticsearch
如果是多节点,其他节点只需要安装elasticsearch即可。
11.0.1.16 | elasticsearch+logstash+kibana |
2.1 安装jdk11(jdk版本>=11)
jdk安装包不能直接wget下载,oracle下载需要用户登录验证
jdk下载地址:Java Downloads | Oracle
[root@elk-16 /]# hostnamectl set-hostname elk-16
[root@elk-16 /]# ls /opt/jdk/
jdk-11.0.20_linux-x64_bin.tar.gz
[root@elk-16 /]# tar -zxf jdk-11.0.20_linux-x64_bin.tar.gz
[root@elk-16 /]# vim /etc/profile
#文末添加两行,配置环境变量
export JAVA_HOME=/opt/jdk/jdk-11.0.20
export PATH=$JAVA_HOME/bin:$PATH
[root@elk-16 /]# source /etc/profile
[root@elk-16 /]# java -version
java version "11.0.20" 2023-07-18 LTS
******
2.2 下载安装包
下载组件,注意版本保持一致
[root@elk-16 /]# mkdir /opt/elk
[root@elk-16 /]# cd /opt/elk
[root@elk-16 elk]# wget https://artifacts.elastic.co/downloads/kibana/kibana-7.9.3-linux-x86_64.tar.gz
[root@elk-16 elk]# wget https://artifacts.elastic.co/downloads/logstash/logstash-7.9.3.tar.gz
[root@elk-16 elk]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.3-linux-x86_64.tar.gz
[root@elk-16 elk]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.9.3-linux-x86_64.tar.gz
2.3 授权elk用户
#解压
[root@elk-16 elk]# tar -zxf elasticsearch-7.9.3-linux-x86_64.tar.gz -C /opt/elk/
[root@elk-16 elk]# tar -zxf kibana-7.9.3-linux-x86_64.tar.gz -C /opt/elk/
[root@elk-16 elk]# tar -zxf logstash-7.9.3.tar.gz -C /opt/elk/
#创建elk用户
[root@elk-16 elk]# useradd elk
#创建数据日志目录
[root@elk-16 elk]# mkdir /opt/elk
[root@elk-16 elk]# mkdir /var/log/elk/es7
[root@elk-16 elk]# mkdir /data/es7
#elk用户授权
[root@elk-16 elk]# chown -R elk:elk /opt/elk
[root@elk-16 elk]# chown -R elk:elk /var/log/elk
[root@elk-16 elk]# chown -R elk:elk /data/es7
[root@elk-16 opt]# chown -R elk:elk /opt/elk/logstash-7.9.3
[root@elk-16 opt]# chown -R elk:elk /opt/elk/kibana-7.9.3-linux-x86_64
2.4 配置elasticsearch.yml
更改配置文件elasticsearch.yml
#1、修改elasticsearch.yml配置文件
vim /opt/elk/elasticsearch-7.9.3/config/elasticsearch.yml
# ---------------------------------- Cluster -----------------------------------
cluster.name: bigdata-elk
# ------------------------------------ Node ------------------------------------
node.name: elk-16
# ----------------------------------- Paths ------------------------------------
path.data: /data/es7
path.logs: /var/log/elk/es7
# ---------------------------------- Network -----------------------------------
network.host: 0.0.0.0
transport.host: 0.0.0.0
network.publish_host: 11.0.1.16
http.port: 9200
# --------------------------------- Discovery ----------------------------------
#如果有多节点,其他节点只需要安装es7,其余两个不用,并且这两行需要添加所有节点IP、主机名,用逗号“,”隔开
discovery.seed_hosts: ["11.0.1.16"]
cluster.initial_master_nodes: ["elk-16"]
# ---------------------------------- Various -----------------------------------
http.cors.enabled: true
http.cors.allow-origin: "*"
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
#2、修改系统参数,不修改可能达到系统瓶颈,导致软件崩溃
echo "vm.max_map_count=655360" >> /etc/sysctl.conf
sysctl -p
报错:sysctl: cannot stat /proc/sys/–p: No such file or directory
执行以下命令:
1、 modprobe br_netfilter
2、 ls /proc/sys/net/bridge
3、 sysctl -p
vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536
echo "elk soft nproc 65536" >> /etc/security/limits.d/20-nproc.conf
#3、告警:Elasticsearch built-in security features are not enabled. Without authentication, your cluster could be accessible to anyone.
#在文件elasticsearch.yml中加入下面的配置
xpack.security.enabled: false
2.5 启动elasticsearch
注意切换到elk用户再启动elasticsearch
提示jdk版本过低(因为一开始我装的是jdk8,后面改了jdk11就没问题了)
[elk@elk-16 elk]$ /opt/elk/elasticsearch-7.9.3/bin/elasticsearch -d
future versions of Elasticsearch will require Java 11; your Java version from [/opt/jdk/jdk1.8.0_381/jre] does not meet this requirement
future versions of Elasticsearch will require Java 11; your Java version from [/opt/jdk/jdk1.8.0_381/jre] does not meet this requirement
换到jdk11后,启动正常
[elk@elk-16 elasticsearch-7.9.3]$ /opt/elk/elasticsearch-7.9.3/bin/elasticsearch -d
Java HotSpot(TM) 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
******
For complete error details, refer to the log at /var/log/elk/es7/elk.log
ctrl+c不会停止elasticsearch,测试,有以下内容表示elasticsearch启动成功。
[root@elk-16 ~]# curl 127.0.0.1:9200
{
"name" : "elk-16",
"cluster_name" : "elk",
"cluster_uuid" : "ZwKngvYkT82yM-lbqAgXXA",
"version" : {
"number" : "7.9.3",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "c4138e51121ef06a6404866cddc601906fe5c868",
"build_date" : "2020-10-16T10:36:16.141335Z",
"build_snapshot" : false,
"lucene_version" : "8.6.2",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
宿主机也测试一下,遇到过11.0.1.16本机可以访问,虚拟机宿主机却访问不了的情况,正常情况下本机宿主机都是可以访问的。
如果想要结束elasticsearch进程,用kill命令结束进程
#查看进程号
ps -ef | grep elastic 或者 lsof -i:9200
kill -9 ***
三、部署logstash
3.1 启动测试
注意,解压logstash后可能会出现找不到java命令的情况,使用source /etc/profiles 刷新环境变量即可,测试启动logstash,出现“Successfully started Logstash API endpoint {:port=>9600}
”启动成功。
[root@elk-16 opt]# su elk
[elk@elk-16 opt]# cd /opt/elk/logstash-7.9.3
[elk@elk-16 logstash-7.9.3]# bin/logstash -e 'input {stdin {}} output {stdout {}}'
Java HotSpot(TM) 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.jruby.ext.openssl.SecurityHelper
******
[2023-09-25T17:20:44,771][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
hello
{
"@timestamp" => 2023-09-25T14:36:42.644Z,
"@version" => "1",
"host" => "elk-16",
"message" => "hello"
}
#hello是我输入的,启动后会生成终端,可以随意输入,ctrl+c停止logstash运行
3.2 可能出现的报错
出现“Errno::EACCES - Permission denied - /opt/elk/logstash-7.9.3/data”,没有给elk用户授权/opt/elk/logstash-7.9.3
#无logstash-7.9.3/data无权限
[elk@elk-16 logstash-7.9.3]$ bin/logstash -e 'input { stdin { } } output { stdout {} }'
******
[ERROR] 2023-09-25 22:28:46.776 [main] Logstash - java.lang.IllegalStateException: Logstash stopped processing because of an error: (ArgumentError) Path "/opt/elk/logstash-7.9.3/data" does not exist, and I failed trying to create it: Errno::EACCES - Permission denied - /opt/elk/logstash-7.9.3/data
如果授权后还是不行,尝试删除/opt/elk/logstash-7.9.3/data。删除后使用logstash命令会重新生产一个data目录。
[elk@elk-16 logstash-7.9.3]# bin/logstash -e 'input {stdin {}} output {stdout {}}'
******
[2023-09-25T17:25:46,132][ERROR][org.logstash.Logstash ] java.lang.IllegalStateException: Logstash stopped processing because of an error: (SystemExit) exit
3.3 指定配置文件启动logstash
更改配置文件需要切换回root用户,建议开两个终端,一个elk一个root,避免来回切换麻烦。
[elk@elk-16 logstash-7.9.3]# su root
[root@elk-16 logstash-7.9.3]# vim /opt/elk/logstash-7.9.3/config/test_file.conf
input {
file {
path => ["/var/log/elk/es7/bigdata-elk.log"]
type => "bigdata-elk"
}
}
output {
elasticsearch {
hosts => ["11.0.1.16:9200"]
index => "sbigdata-elk-log-%{+YYY.MM.dd}"
}
}
注意启动都是elk用户,指定配置文件启动logstash成功
[elk@elk-16 logstash-7.9.3]$ bin/logstash -f config/test_file.conf
******
[2023-09-26T10:42:02,634][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
需要保证elasticsearch启动,没有启动会抛出拒绝连接错误
[2023-09-25T23:08:00,360][WARN ][logstash.outputs.elasticsearch][main] Attempted to resurrect connection to dead ES instance, but got an error. {:url=>"http://11.0.1.16:9200/", :error_type=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError, :error=>"Elasticsearch Unreachable: [http://11.0.1.16:9200/][Manticore::SocketException] 拒绝连接 (Connection refused)"}
打开新的终端,查看9200、9600
[root@elk-16 ~]# netstat -tulnp | grep 9600
tcp6 0 0 127.0.0.1:9600 :::* LISTEN 1755/java
[root@elk-16 ~]#
[root@elk-16 ~]# netstat -tulnp | grep 9200
tcp6 0 0 :::9200 :::* LISTEN 1483/java
3.4 安装Elasticsearch Head
两种方式,谷歌插件或者部署nodejs,可以观察集群监控状态
3.4.1 安装谷歌插件
下载谷歌插件Multi Elasticsearch Head,注意需要挂梯子,没条件请使用nodejs,打开插件,“New”,输入elasticsearch接口URL。
3.4.2 安装nodejs
github下载elasticsearch-head-master.zip传入/opt/elk目录
下载地址:GitHub - mobz/elasticsearch-head: A web front end for an elastic search cluster
安装nodejs
#nodejs v14.15安装包
[root@elk-16 elk]# wget https://nodejs.org/dist/v14.15.0/node-v14.15.0-linux-x64.tar.xz
[root@elk-16 elk]# xz -d node-v14.15.0-linux-x64.tar.xz
[root@elk-16 elk]# tar -xf node-v14.15.0-linux-x64.tar
[root@elk-16 elk]# unzip elasticsearch-head-master.zip
#phantomjs 官网 https://phantomjs.org/download.html
[root@elk-16 elk]# wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@elk-16 elk]# yum -y install bzip2 fontconfig-devel
[root@elk-16 elk]# tar -xvjf phantomjs-2.1.1-linux-x86_64.tar.bz2
#创建node、npm命令软连接
[root@elk-16 elk]# ln -s /opt/elk/node-v14.15.0-linux-x64/bin/node /usr/local/bin/node
[root@elk-16 elk]# ln -s /opt/elk/node-v14.15.0-linux-x64/bin/npm /usr/local/bin/npm
[root@elk-16 elk]# ln -s /opt/elk/phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin/phantomjs
#查看版本
[root@elk-16 elk]# node -v
v14.15.0
[root@elk-16 elk]# npm -v
6.14.8
[root@elk-16 elk]# phantomjs --version
2.1.1
#安装模块
[root@elk-16 elk]# cd /opt/elk/elasticsearch-head-master
[root@elk-16 elasticsearch-head-master]# npm install --registry=https://registry.npm.taobao.org
npm install 报错,npm install因为某些原因中断最好删除node_modules目录
npm ERR! phantomjs-prebuilt@2.1.16 install: `node install.js`
#手动全局安装phantomjs-prebuilt@2.1.16
[root@elk-16 elasticsearch-head-master]# npm -g install phantomjs-prebuilt@2.1.16 --ignore-script
测试前台启动成功后ctrl+c再用后台启动
#前台启动
[root@elk-16 elasticsearch-head-master]# npm run start
******
Waiting forever...
Started connect web server on http://localhost:9100
#后台启动
[root@elk-16 elasticsearch-head-master]# npm run start &
[root@elk-16 ~]# netstat -tulnp |grep 9100
tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 5080/grunt
四、部署kibana
4.1 修改配置文件并启动
#修改配置文件
vim /opt/elk/kibana-7.9.3-linux-x86_64/config/kibana.yml
server.port: 5601
server.host: "11.0.1.16"
server.name: "bigdata-kibana"
elasticsearch.hosts: ["http://11.0.1.16:9200"]
logging.dest: /var/log/elk/kibana/kibana.log
i18n.locale: "zh-CN"
#创建日志目录
mkdir /var/log/elk/kibana
chown -R elk:elk /var/log/elk/kibana
#前台启动kibana
bin/kibana
#后台启动kibana
bin/kibana &
查看9200 9600 9100 5601 端口,结束进程请使用kill命令
通过查询端口号结束后台运行进程
[root@elk-16 /]# yum install -y lsof
[root@elk-16 /]# lsof -i:5601
[root@elk-16 /]# kill -9 ******
访问 http://11.0.1.16:5601/
至此,elasticsearch+logstash+kibana日志监控系统部署完成。
参考文档:
https://www.cnblogs.com/wangzhuxing/p/9665905.html#_label1_1
ELK 安装部署(入门必备)_elk安装部署_与光同尘~追光者的博客-CSDN博客
logstash报错问题解决:Logstash stopped processing because of an error: (SystemExit) exit_BigCabbageFy的博客-CSDN博客
npm install 安装时i,报错 phantomjs-prebuilt@2.1.16 install: `node install.js`-CSDN博客