ELK日志管理平台监控nginx/tomcat/docker日志
- 啰嗦
- 背景介绍
- 解决方案
- 软件介绍
- 监控目标
- 实现原理图
- 需要软件工具和环境
- 安装
- elasticsearch安装配置
- logstash安装配置
- kibana安装配置
- 总结
啰嗦
随便看了一眼自己的博客,已经很久没有更新了。由于工作些许(懒)有(癌)点(晚)忙(期),所以一直没有在写。看着孤零零的几篇文件太过于单调了,所以以后争取每周上一点新东西。
背景介绍
基于平台化的产品,项目越来越多,导致日志管理越来越麻烦,一两个项目还好管理,运维或者开发需要日志了可以直接拉取,便于分析问题。但是越来越多的项目,分布在不同的服务器,不同的tomcat,不同的日志目录下的时候。获取日志就变得力不从心,每次都要去找这个项目的日志名称是什么,在那个服务器中(心好累)
解决方案
基于我们的需求,目前开源的软件ELK可以很好地完成日志的收集、整理、展示。这篇文章用最简单的方法搭建日志管理平台(ElasticSearch + Logstash + Kibana),后面有时间,我会在写一篇更合理的日志管理平台(filebeat + kafka +ElasticSearch + Logstash + Kibana),逐步完善日志管理平台。
软件介绍
- ElasticSearch:是一个基于Lucene的开源分布式搜索服务器。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。 在elasticsearch中,所有节点的数据是均等的。
- Logstash:是一个完全开源的工具,它可以对你的日志进行收集、过滤、分析,支持大量的数据获取方法,并将其存储供以后使用(如搜索)。说到搜索,logstash带有一个web界面,搜索和展示所有日志。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
- Kibana :是一个基于浏览器页面的Elasticsearch前端展示工具,也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。
监控目标
主要监控一些最常用的日志,例如:nginx日志、tomcat日志、docker日志等等
实现原理图
需要软件工具和环境
- Ubuntu 14.0.4
- elasticsearch-7.1.1.tar.gz
- kibana-7.1.1-linux-x86_64.tar.gz
- logstash-7.1.1.tar.gz
- ELK下载地址
安装
elasticsearch安装配置
- 首先解压elasticsearch-7.1.1.tar.gz
tar -zxvf elasticsearch-7.1.1.tar.gz - config/elasticsearch.yml配置文件,一般默认IP:0.0.0.0,端口9200,没有特殊需求的可以不用改。(如果es启动访问不了的,可以把IP改成本机的ip试试)
- 启动elasticsearch(启动该软件不能使用root用户,需要普通用户,可以新建普通用户,将 目录的权限都赋予给该新用户)
- 创建命令:在linux命令行执行
useradd es
passwd es
123456
es/123456 - 切换成es用户启动elasticsearch
在/usr/local/elasticsearch-7.1.1路径下执行 nohup bin/elasticsearch & (后台执行)或者 bin/elasticsearch
项目启动成功可以用浏览器查看 - 遇到的安装问题
-
http://ip:9200/ 无法访问
解决方法:vim config/elasticsearch.yml 增加network.host: 0.0.0.0 - ERROR: [5] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
[2]: max number of threads [1024] for user [es] is too low, increase to at least [4096]
[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决方法:1. vi /etc/security/limits.conf
添加或者修改
soft nofile 65536
hard nofile 65536
2. vi /etc/sysctl.conf
添加 vm.max_map_count=655360
3. 保存后执行
sysctl -p
logstash安装配置
- 首先解压logstash-7.1.1.tar.gz
- 编辑你自己的安装目录/usr/local/logstash-7.1.1/config下的logstash-sample.conf文件,input中输入
// An highlighted block
file {
path => ["/logs/pCredit.log","/logs/bizPCredit.log","/logs/pCredit.log.*","/logs/bizPCredit.log.*"]
start_position => "beginning"
type => "pcredit"
codec => json {
charset => "UTF-8"
}
}
file {
path => ["/logs/mobileFinance.log"]
start_position => "beginning"
type => "mobileFinance"
codec => json {
charset => "UTF-8"
}
}
file {
path => ["/var/log/nginx/*.log"]
start_position => "beginning"
type => "nginx"
codec => json {
charset => "UTF-8"
}
}
file {
path => ["/var/lib/docker/containers/*/*.log"]
start_position => "beginning"
type => "order"
codec => json {
charset => "UTF-8"
}
}
filter中输入
// An highlighted block
date {
match => [ "timestamp" , "YYYY-MM-dd HH:mm:ss" ]
}
output中输入
// An highlighted block
if "_grokparsefailure" in [tags] {
}else{
if [type] == "pcredit"{
elasticsearch {
hosts => ["http://localhost:9200"]
index => "pcredit"
user => "elastic"
password => "changeme"
}
}
if [type] == "mobileFinance"{
elasticsearch {
hosts => ["http://localhost:9200"]
index => "mobilefinance"
user => "elastic"
password => "changeme"
}
}
if [type] == "nginx"{
elasticsearch {
hosts => ["http://localhost:9200"]
index => "nginx"
user => "elastic"
password => "changeme"
}
}
if [type] == "order"{
elasticsearch {
hosts => ["http://localhost:9200"]
index => "order"
user => "elastic"
password => "changeme"
}
}
stdout {
codec => rubydebug
}
- 启动logstash:使用root用户,路径/usr/local/logstash-7.1.1/
命令: nohup bin/logstash &(后台运行) 或者 bin/logstash
kibana安装配置
- 首先解压kibana-7.1.1.tar.gz
- 查看kibana配置/usr/local/kibana-7.1.1-linux-x86_64/config/
- 启动kibana:路径/usr/local/kibana-7.1.1-linux-x86_64/
nohup bin/kibana & 或者 bin/kibana - 这里我的路径是用nginx映射出来的,kibana最新的版本已经没有登录管理了,所以要在nginx中配置权限管理,权限管理我们下一章中来讲。
大家也可以参考这个文章:Kibana设置登录认证
1. 2. curl -X PUT ‘localhost:9200/order/person/1’ -d ’
{
“user”: “张三”,
“title”: “工程师”,
“desc”: “数据库管理”
}’
- 创建索引
- 如果kibana中没有找到你创建的索引,可以在
- 执行:
然后去查看:linux命令行查看:
curl -X GET ‘http://localhost:9200/_cat/indices?v’
总结
ELK比较简单的一个框架就搭建好了,目前这个框架适合不是日志量很大的项目使用。logstash比较消耗内存,所有后面的教程收集日志会换成filebeat。如果有哪里写的不对请大家指正,如果有不了解的可以给我留言或者联系我,一起学习,共同进步。