配置ELK技术栈来分析apache tomcat日志
- 原作者使用9201端口,官方默认是9200,我做了修改
- 原作者默认你已经安装了apache tomcat
- 译者博客:http://www.zimug.com
翻译,原文地址:https://aggarwalarpit.wordpress.com/2015/12/03/configuring-elk-stack-to-analyse-apache-tomcat-logs/
配置ELK技术栈来分析apache tomcat日志
Posted on December 3, 2015 by Arpit Aggarwal
在这篇文章,我将安装ElasticSearch, Logstash and Kibana分析Apache Tomcat服务日志。在安装之前,对各个组件做个简介!
- ElasticSearch 有强大的搜索功能的无模式数据库,可以简单的很想扩展,索引每一个字段,可以聚合分组数据。
- Logstash 用Ruby编写的,我们可以使用管道输入和输出数据到任何位置。一个可以抓取,转换,存储事件到ElasticSearch的ETL管道。打包版本在JRuby上运行,并使用几十个线程进行并行的数据处理,利用了JVM的线程功能。
- Kibana 基于web的数据分析,为ElasticSearch仪表板的工具。充分利用ElasticSearch的搜索功能,以秒为单位可视化数据。支持Lucene的查询字符串的语法和Elasticsearch的过滤功能。
下面,我将开始分别安装技术栈中的每一个组件,下面是步骤:
步骤 1:
下载并解压 ElasticSearch .tar.gz 到一个目录下, 我下载的是 elasticsearch-2.1.0.tar.gz 并且以elasticsearch为文件名解压到/Users/ArpitAggarwal/目录下面
步骤 2:
在bin目录下以./elasticsearch启动elasticsearch服务,如下:
$ cd /Users/ArpitAggarwal/elasticsearch/elasticsearch-2.1.0/bin
$ ./elasticsearch
上面的命令启动的elasticsearch可以通过 http://localhost:9200/ 访问,默认的索引访问地址 http://localhost:9200/_cat/indices?v
如果删除索引(所有),通过如下命令行:
curl -XDELETE 'http://localhost:9200/*/'
步骤 3:
下面,我们安装配置kibana,指向我们的ElasticSearch实例,同样需要下载并解压.tar.gz到目录下,我的是kibana-4.3.0-darwin-x64.tar.gz,以kibana为文件名解压到/Users/ArpitAggarwal/
步骤 4:
修改/Users/ArpitAggarwal/kibana/kibana-4.3.0-darwin-x64/config/kibana.yml配置,指向本地的ElasticSearch实例,替换elasticsearch.url的值为http://localhost:9200
步骤 5:
通过bin目录下的./kibana启动kibana,如下:
$ cd /Users/ArpitAggarwal/kibana/kibana-4.3.0-darwin-x64/bin
$ ./kibana
可以通过 http://localhost:5601/ 访问kibana
步骤 6:
下面,我们安装配置Nginx,指向我们的Kibana实例。同样需要下载并解压.tar.gz到目录下,我的是nginx-1.9.6.tar.gz,以nginx为文件名解压到/Users/ArpitAggarwal/,命令如下:
$ cd nginx-1.9.6
$ ./configure
$ make
$ make install
默认情况下,Nginx将被安装到/usr/local/nginx,但是Nginx提供了指定目录安装的方法,使用--prefix选项。如下:
./configure --prefix=/Users/ArpitAggarwal/nginx
Next, open the nginx configuration file at /Users/ArpitAggarwal/nginx/conf/nginx.conf and replace location block under server with below content: 下面,我们打开配置文件/Users/ArpitAggarwal/nginx/conf/nginx.conf,然后替换location段中的配置,内容如下:
location / {
# 指向kiban本地实例
proxy_pass http://localhost:5601;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
步骤 7:
启动 Nginx, 如下:
cd /Users/ArpitAggarwal/nginx/sbin
./nginx
可以通过 http://localhost 访问nginx
步骤 8:
下面,我们安装Logstash,执行如下命令:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null
brew install logstash
上面的命令安装 Logstash 到 /usr/local/opt/。(译者注:此安装方法较特殊,建议参考官网方法)
步骤 9:
我们需要让Logstash将数据从tomcat server日志目录送到ElasticSearch。创建一个目录,我们将创建logstash配置文件,我将它放到/Users/ArpitAggarwal/下,如下:
cd /Users/ArpitAggarwal/
mkdir logstash patterns
cd logstash
touch logstash.conf
cd ../patterns
touch grok-patterns.txt
将如下内容复制到:logstash.conf:
input {
file {
path => "/Users/ArpitAggarwal/tomcat/logs/*.log*"
start_position => beginning
type=> "my_log"
}
}
filter {
multiline {
patterns_dir => "/Users/ArpitAggarwal/logstash/patterns"
pattern => "[%{TOMCAT_DATESTAMP}"
what => "previous"
}
if [type] == "my_log" and "com.test.controller.log.LogController" in [message] {
mutate {
add_tag => [ "MY_LOG" ]
}
if "_grokparsefailure" in [tags] {
drop { }
}
date {
match => [ "timestamp", "UNIX_MS" ]
target => "@timestamp"
}
} else {
drop { }
}
}
output {
stdout {
codec => rubydebug
}
if [type] == "my_log" {
elasticsearch {
manage_template => false
host => localhost
protocol => http
port => "9201"
}
}
}
下面,将https://github.com/elastic/logstash/blob/v1.2.2/patterns/grok-patterns的内容复制到 patterns/grok-patterns.txt
步骤10:
使用如下命令,检查logstash的配置
$ cd /usr/local/opt/
$ logstash -f /Users/ArpitAggarwal/logstash/logstash.conf --configtest --verbose —debug
步骤 11:
启动Logstash,使数据送到ElasticSearch
$ cd /usr/local/opt/
$ logstash -f /Users/ArpitAggarwal/logstash/logstash.conf
喜欢 (2)or分享 (0)
- Python学习笔记(4):自定义时间类
- Mysql备份系列(3)--innobackupex备份mysql大数据(全量+增量)操作记录
- 微信小程序开发:设置消息推送
- Mysql备份系列(1)--备份方案总结性梳理
- ASP.NET中常用的优化性能的方法(转贴,Icyer收集整理)
- 顶象全场景IoT安全方案解决物联网两大难题
- 诡异的【session丢失】和【<img src="">标签】
- TensorFlow核心使用要点
- “搜一搜”直达生活服务 微信连接移动消费新场景
- Linux服务器安全登录设置记录
- Linux系统下的ssh使用(依据个人经验总结)
- 从MapX到MapXtreme2004[4]-标注AutoLabel
- Linux下锁定账号,禁止登录系统的设置总结
- 深度解析 TypeConverter & TypeConverterAttribute (一)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- TCP:测试小工具TCPing
- 对象实例化内存布局与访问定位 Krains 2020-08-14
- 基于Docker Compose部署分布式MinIO集群
- Go语言 | 从并发模式看channel使用技巧
- 字节码文件 Krains 2020-08-04
- 为WordPress添加自定义设置上传头像功能
- 229. 求众数 II Krains 2020-08-04 16:03:03 数学
- 部署 Consul服务实现Docker容器跨主机通信
- 【测试】 Java如何优雅的生成测试数据
- Spring事物的传播行为案例分析
- Ingress-nginx灰度发布功能详解
- [885]Tensorflow设置CUDA_VISIBLE_DEVICES来控制GPU的使用
- Windows10:启用或禁用休眠、保留的存储
- 基于Vue SEO的四种方案
- 一道SQL问题,你来试试的?