之前的日志文件一直是保存在项目目录下,虽然做了一天一个日志文件的处理,但是查看和管理日志还不是很方便,以此契机引入了ELK,此次将ELK单独部署在一个单独的服务器。其他服务会通过logback将日志写入这个服务器
1、ELK简介
ELK是Elasticsearch+Logstash+Kibana的简称
ElasticSearch是一个基于Lucene的分布式全文搜索引擎,提供 RESTful API进行数据读写
Logstash是一个收集,处理和转发事件和日志消息的工具
- Kibana是Elasticsearch的开源数据可视化插件,为查看存储在ElasticSearch提供了友好的Web界面,并提供了条形图,线条和散点图,饼图和地图等分析工具
总的来说,ElasticSearch负责存储数据,Logstash负责收集日志,并将日志格式化后写入ElasticSearch,Kibana提供可视化访问ElasticSearch数据的功能。
准备工作:
1、一台服务器 我使用的是CentOS
2、
Elasticsearch | 6.0.0 |
Logstash | 6.0.0 |
Kibana | 6.0.0 |
JDK | 1.8 |
3、在服务器上安装jdk
由于Elasticsearch、Logstash、Kibana均不能以root账号运行。所以要创建一个ELK专用账户
useradd elk
- 创建ELK相关目录并赋权
#创建ELK APP目录
mkdir /usr/elk
#创建ELK 数据目录
mkdir /elk
#更改目录Owner
chown -R elk:elk /usr/elk
chown -R elk:elk /elk
#打开文件夹
cd /home/download
#下载
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.0.tar.gz
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.0.0.tar.gz
wget wget https://artifacts.elastic.co/downloads/kibana/kibana-6.0.0-linux-x86_64.tar.gz
#解压
tar -zvxf elasticsearch-6.0.0.tar.gz
tar -zvxf logstash-6.0.0.tar.gz
tar -zvxf kibana-6.0.0-linux-x86_64.tar.gz
部署Elasticsearch
- 移动Elasticsearch到统一目录
#移动目录
mv /home/download/elasticsearch-6.0.0 /usr/elk
#赋权
chown -R elk:elk /usr/elk/elasticsearch-6.0.0/
- 开放端口
#增加端口
firewall-cmd --add-port=9200/tcp --permanent
firewall-cmd --add-port=9300/tcp --permanent
#重新加载防火墙规则
firewall-cmd --reload
注意如果防火墙关闭了需要先打开防火墙
注意下方的启动命令,如果需要在后台运行可使用& ,比如 ./bin/elasticsearch & 就是在后台启动,返回一个PID
,但是对于logstash,遇到关闭xshell后就停止的情况,需要使用nohup,即-->
nohup ./bin/logstash -f config/input-output.conf &
- 切换账号
#账号切换到 elk
su - elk
- 数据&日志目录
创建Elasticsearch主目录
mkdir /elk/es
#创建Elasticsearch数据目录
mkdir /elk/es/data
#创建Elasticsearch日志目录
mkdir /elk/es/logs
- 启动
#进入elasticsearch根目录
cd /usr/elk/elasticsearch-6.0.0
#启动
./bin/elasticsearch
- 查看健康状态
curl http://服务器IP地址:9200/_cluster/health
如果返回status=green表示正常
{
"cluster_name": "esc",
"status": "green",
"timed_out": false,
"number_of_nodes": 2,
"number_of_data_nodes": 2,
"active_primary_shards": 0,
"active_shards": 0,
"relocating_shards": 0,
"initializing_shards": 0,
"unassigned_shards": 0,
"delayed_unassigned_shards": 0,
"number_of_pending_tasks": 0,
"number_of_in_flight_fetch": 0,
"task_max_waiting_in_queue_millis": 0,
"active_shards_percent_as_number": 100.0
}
Logstash 配置
- 移动Logstash到统一目录
#移动目录
mv /home/download/logstash-6.0.0 /usr/elk
#赋权
chown -R elk:elk /usr/elk/logstash-6.0.0/
- 切换账号
#账号切换到 elk
su - elk
- 数据&日志目录
#创建Logstash主目录
mkdir /elk/logstash
#创建Logstash数据目录
mkdir /elk/logstash/data
#创建Logstash日志目录
mkdir /elk/logstash/logs
- 配置数据&日志目录
#打开目录
cd /usr/elk/logstash-6.0.0
#修改配置
vi config/logstash.yml
#增加以下内容
path.data: /elk/logstash/data
path.logs: /elk/logstash/logs
#增加端口
firewall-cmd --add-port=4567/tcp --permanent
#重新加载防火墙规则
firewall-cmd --reload
- 配置Redis&Elasticsearch
vi config/input-output.conf
#配置内容
# 4567 接收日志端口
input {
tcp {
port => 4567
codec => "json"
}
}
filter {
}
output {
elasticsearch {
hosts => ["127.0.0.1:9200"]
index => "logstash-%{type}-%{+YYYY.MM.dd}"
document_type => "%{type}"
}
#下面表示将日志输出到控制台,注意如果是使用nuhop命令启动logstash,则会在当前路径下创建nulop.txt文件,
#如果使用 stdout,则会将所有收集到的日志写入nulop.txt文件,造成一个几十G的文件产生且占用磁盘,因此要去掉
# stdout {
# codec => rubydebug
# }
}
- 启动
#进入Logstash根目录
cd /usr/elk/logstash-6.0.0
#启动
./bin/logstash -f config/input-output.conf
启动成功后,在启动输出的最后一行会看到如下信息:
[INFO ][logstash.pipeline ] Pipeline started {"pipeline.id"=>"main"}
[INFO ][logstash.agent ] Pipelines running {:count=>1, :pipelines=>["main"]}
注意配置文件别写错了,不然启不来的
Kibana 配置
- 移动Kibana到统一目录
#移动目录
mv /home/download/kibana-6.0.0-linux-x86_64 /usr/elk/kibana-6.0.0
#赋权
chown -R elk:elk /usr/elk/kibana-6.0.0/
- 开放端口
#增加端口
firewall-cmd --add-port=5601/tcp --permanent
#重新加载防火墙规则
firewall-cmd --reload
- 切换账号
#账号切换到 elk
su - elk
- 修改配置
#进入kibana-6.0.0根目录
cd /usr/elk/kibana-6.0.0
#修改配置
vi config/kibana.yml
#增加以下内容
server.port: 5601
server.host: "服务器IP地址"
elasticsearch.url: "http://127.0.0.1:9200"
注意
如果 kibana起不来 且报监听5601端口出错,在保证端口没有被占用的前提下,可将server.host设置为:server.host:"0.0.0.0"
- 启动
#进入kibana-6.0.0根目录
cd /usr/elk/kibana-6.0.0
#启动
./bin/kibana
- 访问
浏览器访问: 服务器IP地址:5601 会出现Kibana主页
配置logback的配置文件
<!-- 写入远端logstash --> <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <param name="Encoding" value="UTF-8"/> <remoteHost>服务器IP地址</remoteHost> <port>4567</port> <!-- encoder is required --> <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" /> </appender>
别忘了将appdender加入root中
<root level="INFO"> <appender-ref ref="logstash"/> </root>
在POM文件中添加依赖
<dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>4.11</version> </dependency> <dependency> <groupId>net.logstash.log4j</groupId> <artifactId>jsonevent-layout</artifactId> <version>1.7</version> </dependency>
参考文章:https://ken.io/note/elk-deploy-guide