安装ES
ELK是有Elastic公司的三个组件配合进行日志收集,分别是:
- ElasticSearch:用于存储日志信息。
- Logstash:用于收集、处理和转发日志信息。
- Kibana:提供可搜索的Web可视化界面。
当然,现在很多都配合着Beats进行使用,这里不做过多描述,感兴趣的可以查看官网,https://www.elastic.co/cn/products/beats,这里有很多对Beats的描述。
安装ES
-
从官网下载elasticsearch
-
将压缩包解压到适当位置
-
通过终端进入到文件夹内
-
修改elasticsearch的配置文件,文件路径在
elasticsearch-6.7.1/config/elasticsearch.yml
,在文件末端追加:# 去掉指定的ip地址 network.host: 0.0.0.0
-
启动ES:命令行输入命令如下:
1. cd bin/ 2. ./elasticsearch //前台运行 或者 nohub ./elasticsearch & //后台运行
-
验证是否安装成功:
浏览器输入:http://localhost:9200/
安装Head
-
安装 nodejs
-
安装grunt
npm install -g grunt-cli
- 安装完成后执行:
grunt -version
-
配置运行
-
进入Elasticsearch安装目录下的config目录,修改elasticsearch.yml文件.在文件的末尾加入以下代码
# 配置head http.cors.enabled: true http.cors.allow-origin: "*" node.master: true node.data: true
-
重启ES
-
在https://github.com/mobz/elasticsearch-head中下载head插件,选择下载zip
-
解压到指定文件夹下,进入该文件夹,修改
Gruntfile.js
在对应的位置加上hostname:'*'
-
执行
npm install
安装
,完成后执行grunt server
或者npm run start
运行head插件,如果运行不成功建议重新安装grunt。成功如下登录地址:http://127.0.0.1:9100
-
安装Kibana
-
安装JDK8以上版本。
-
下载kibana,注意版本一定要与ES一致。
-
解压kibana到指定文件夹
-
修改
config/kibana.yml
配置文件# 允许远程访问 server.host: "0.0.0.0" # es主机地址 elasticsearch.hosts: ["http://ip:9200"]
kibana常见配置项:
# pingElasticsearch超时时间 elasticsearch.pingTimeout # 读取Elasticsearch数据超时时间 elasticsearch.requestTimeout #Elasticsearch主机地址 elasticsearch.url: "http://ip:9200" # 允许远程访问 server.host: "0.0.0.0" # Elasticsearch用户名 这里其实就是我在服务器启动Elasticsearch的用户名 elasticsearch.username: "es" # Elasticsearch鉴权密码 这里其实就是我在服务器启动Elasticsearch的密码 elasticsearch.password: "es"
-
直接启动,进入bin目录
./kibana
后台启动,进入bin目录
nohup ./kibana &
-
访问http://ip:5601
汉化kibana
- 下载汉化文件:https://github.com/anbai-inc/Kibana_Hanization/
- 参考github中的项目介绍进行汉化。
安装logstash
-
下载logstash,注意版本要与es一致
-
解压文件到指定位置
-
测试logstash
-
进入logstash目录
-
简单输出到控制台
bin/logstash -e 'input { stdin { } } output { stdout {} }'
-
日志文件输出到ES中
-
在logstash文件夹中创建文件,logstash.conf
-
在logstash.conf中输入es的相关信息:
```yml input { tcp { mode => "server" host => "0.0.0.0" port => 4560 codec => json_lines } } output { elasticsearch { hosts => "localhost:9200" index => "springboot-logstash-%{+YYYY.MM.dd}" } } ```
-
启动logstash
bin/logstash -f logstash.conf
-
springboot集成logstash
-
在项目中添加logstash-logback-encoder依赖
<dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>5.3</version> </dependency>
-
配置logback日志
<?xml version="1.0" encoding="UTF-8"?> <configuration> <include resource="org/springframework/boot/logging/logback/base.xml" /> <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <destination>127.0.0.1:4560</destination> <!-- 日志输出编码 --> <encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"> <providers> <timestamp> <timeZone>UTC</timeZone> </timestamp> <pattern> <pattern> { "logLevel": "%level", "serviceName": "${springAppName:-}", "pid": "${PID:-}", "thread": "%thread", "class": "%logger{40}", "rest": "%message" } </pattern> </pattern> </providers> </encoder> </appender> <root level="INFO"> <appender-ref ref="LOGSTASH" /> <appender-ref ref="CONSOLE" /> </root> </configuration>
-
启动springboot项目
-
打开kibana管理页面,添加刚刚创建的索引
定时删除过期的日志
#/bin/bash
#es-index-clear
#只保留15天内的日志索引
LAST_DATA=`date -d "-15 days" "+%Y.%m.%d"`
#删除上个月份所有的索引
curl -XDELETE 'http://ip:port/*-'${LAST_DATA}'*'
crontab -e添加定时任务:
0 1 * * * /search/odin/elasticsearch/scripts/es-index-clear.sh
问题
ERROR: Cluster name [elasticsearch_nathan] subdirectory exists in data paths]
解决办法:删除路径中提到的路径:例如:删除/usr/local/var/lib/elasticsearch