踩坑学习记录
一、下载ELK的安装包上传并解压
我这边用到的版本是7.6.1版本,ELK最好版本统一,避免版本兼容导致失败,可以在官网下载,下载可能会慢,我这里下载好了,可以直接用
1.Elasticsearch下载
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.1-linux-x86_64.tar.gz
2.Logstash下载
https://artifacts.elastic.co/downloads/logstash/logstash-7.6.1.tar.gz
3.Kibana下载
https://artifacts.elastic.co/downloads/kibana/kibana-7.6.1-linux-x86_64.tar.gz
上传到自定义目录:
/usr/local/src/elk
4.上传并解压
接下来使用 XShell 工具连接到服务器或者虚拟机
ES压缩包解压:进入 /usr/local/src/elk 目录
elasticsearch解压命令:tar -zxvf elasticsearch-7.6.1-linux-x86_64.tar.gz
logstash解压命令:tar -zxvf logstash-7.6.1.tar.gz
kibana解压命令:tar -zxvf kibana-7.6.1-linux-x86_64.tar.gz
解压后的文件夹修改下名字,方便输入:mv elasticsearch-7.6.1 elasticsearch7
解压后的文件夹修改下名字,方便输入:mv kibana-7.6.1 kibana7
解压后的文件夹修改下名字,方便输入:mv logstash-7.6.1 logstash7
ES目录介绍
bin:下面存放着Es启动文件 elasticsearch.bat/elasticsearch
config:配置目录
data:数据目录
jdk、lib:Java运行环境以及依赖包
logs:日志目录
modules、plugins:模块及插件目录,head插件可以存放在plugins目录下
二、Elasticsearch配置
1.修改配置文件elasticsearch.yml
基础配置
ES 本身其实也相当于是一个数据库,为此,我们在 elasticsearch7 文件夹下自己建一个 data 文件夹,用于存放数据:
mdkir data
进入 data 文件夹下,执行 pwd 命令拷贝下该文件夹的路径,下面配置要用到!
我的 data 路径:
/usr/local/src/elk/elasticsearch7/data
修改配置文件elasticsearch.yml,我们进入elasticsearch7 这个文件夹下的config 文件夹,编辑 elasticsearch.yml 文件:
vim elasticsearch.yml
node.name: node-1
cluster.initial_master_nodes: ["node-1"]
path.data: /usr/local/src/elk/elasticsearch7/data #目录位置以安装为主
path.logs: /usr/local/src/elk/elasticsearch7/logs #目录位置以安装为主
network.host: 0.0.0.0 #对外开放访问
http.port: 9200 #默认9200
跨域问题添加如下几行
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
修改系统配置文件
vi /etc/security/limits.conf 添加四行代码
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
vi /etc/sysctl.conf 文件,增加配置vm.max_map_count=262144
sysctl -p 执行生效
2.新建es用户
因为Elasticsearch为了安全起见,不支持root用户直接启动
新建一个用户elasticsearch,命令:
adduser es
passwd es//修改es用户密码
Changing password for user es.
New UNIX password: //在这里输入新密码
Retype new UNIX password: //再次输入新密码
passwd: all authentication tokens updated successfully.
在elk 目录下 赋予 elasticsearch7 这个文件夹的权限给 es用户由于后续安装kibana也不能以root用户启动,所以我们对外层elk文件夹下赋予权限命令:
chown -R es:es /usr/local/src/elk
命令,切换到 es 用户,并重新到 bin 目录下执行 ES服务
su es
3.启动Elasticsearch
在es安装目录bin下执行
./elasticsearch -d
浏览器访问:http://服务器ip:9200/
显示如下内容表示成功
4.启动问题:
由于某种原因可能导致启动失败,我这边也遇到过一些情况,可以参考解决方案:
4.1:JDK版本问题:
future versions of Elasticsearch will require Java 11; your Java version from [/usr/local/jdk8/jdk1.8.0_291/jre] does not meet this requirement
原因:说明这个版本对应的jdk应该是java11。我们环境中的jdk是java8。其实新版的es是自带了jdk的。但是和我们环境变量的冲突了。
解决方案:修改启动文件,添加如下修改
wget https://download.java.net/java/GA/jdk11/13/GPL/openjdk-11.0.1_linux-x64_bin.tar.gz
tar -xzvf openjdk-11.0.1_linux-x64_bin.tar.gz /opt/
vi bin/elasticsearch
配置自己的jdk11,在启动脚本前加上如下两行
export JAVA_HOME=/opt/jdk-11.0.1 #根据自己解压后的路径设置
export PATH=$JAVA_HOME/bin:$PATH
4.2:GC异常问题:
修改jvm.options将+UseConcMarkSweepGC 改为+UseG1GC
三、Logstash配置
1.新建持久化目录:
mkdir -p /usr/local/src/elk/logstash7/plugin-data
2.修改配置文件logstash.yml
编辑 /config/logstash.yml 配置文件
path.data: /usr/local/src/elk/logstash7/plugin-data #上一步创建logstash 和插件使用的持久化目录
config.reload.automatic: true #开启配置文件自动加载
config.reload.interval: 10 #定义配置文件重载时间周期
http.host: "172.18.10.172" #本台服务器地址,一般为域名或IP,对外开放
- 安装logstash所需插件
从Filebeat 输入、过滤、输出至elasticsearch(logstash 有非常多插件,详见官网,此处不列举)
安装logstash-input-jdbc 和logstash-input-beats-master 插件
如果你的Logstash没有安装logstash-codec-json_lines插件,通过以下命令安装
/usr/local/src/elk/logstash7/bin/logstash-plugin install logstash-integration-jdbc
wget https://github.com/logstash-plugins/logstash-input-beats/archive/master.zip -O /opt/master.zip
unzip -d /usr/local/src/elk/logstash7 /opt/master.zip
root@iZwz91w9jegcgf28ttbe2yZ:/usr/local/src/elk/logstash7/bin# ./logstash-plugin install logstash-codec-json_lines
Validating logstash-codec-json_linesInstalling
logstash-codec-json_lines
Installation successful
4.新建配置文件 logstash.conf(/bin目录下)
vim logstash.conf
配置文档内容
input {
tcp {
#模式选择为server
mode => "server"
#本台服务ip和端口根据自己情况填写,端口默认4560,对应后面整合spring boot的logback.xml里appender中的destination
host => "172.18.10.172"
port => 4560
#格式json
codec => json_lines
}
}
filter {
#过滤器,根据需要填写
}
output {
elasticsearch {
action => "index"
#这里是es的服务器地址
hosts => "172.18.10.172:9200"
#用于kibana过滤,可以填项目名称
index => "cim-logstash-%{+YYYY.MM.dd}"
}
}
5.启动logstash
切换到/usr/local/src/elk/logstash7/bin
nohup ./logstash -f logstash.conf >/dev/null 2>&1 &
验证
访问http://服务器ip:9600/,成功的话会显示一个JSON串
6.启动问题:
由于某种原因可能导致启动失败,我这边也遇到过一些情况,可以参考解决方案:
6.1:内存问题:
:Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c5330000
解决方案
修改logstash核心的执行文件 在bin目录下,有一个可执行的文件logstash,需要添加参数:(可以先不用设置,报错的话再设置)
LS_JAVA_OPTS="-server -Xms256m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=256m"
2./usr/local/src/elk/logstash7/config修改jvm.options
-Xms256m-Xmx256m
四、Kibana配置
1.修改配置文件kibana.yml
修改内容:
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"] #es部署不在同一台,要修改IP地址
i18n.locale: "zh-CN" #kibana页面汉化设置,默认英文
2.启动kibana,kibana启动也是不建议root启动如果强制,可以命令后加--allow-root
进入bin目录启动: ./bin/kibana --allow-root
或者守护进程启动: nohup ./bin/kibana --allow-root
>/dev/null 2>&1 &
进行访问本机访问 http://服务器ip:5601
五、Spring boot整合ELK
日志采集新增Logback直接发送日志到Logstash的形式。如果采用此方式,web服务可减少部分生成log文件配置,提高实时性和日志推送效率
1. 修改 pom.xml
logback 相关
<!-- https://mvnrepository.com/artifact/net.logstash.logback/logstash-logback-encoder -->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>5.3</version>
</dependency>
2. logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--输出到logstash的appender-->
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<!--可以访问的logstash日志收集ip-->
<destination>172.18.10.172:4560</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>
<root level="INFO">
<appender-ref ref="LOGSTASH"/>
</root>
</configuration>
3. Test.java
在接口中使用log进行日志生成,启动项目
- 进入kibana -> 管理 -> 索引模式 -> 创建索引模式,输入 logstash-* ,下一步创建
5. 调用接口触发日志记录,打开Kibana-->Discover菜单-->筛选" logstash-* ",显示请求日志,出现如下信息说明整合成功!!!