elk分析nginx日志和tomcat日志

一、介绍

Elasticsearch + Logstash + Kibana(ELK)是一套开源的日志管理方案。

Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

Logstash是一个完全开源的工具,它可以对你的日志进行收集、分析,并将其存储供以后使用

kibana 是一个开源和免费的工具,它可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

ELK官网:https://www.elastic.co/

ELK官网文档:https://www.elastic.co/guide/index.html

ELK中文手册:http://kibana.logstash.es/content/elasticsearch/monitor/logging.html

二、本次试验环境说明

系统:centos6.5_x86_64

软件:elasticsearch-6.1.2、kibana-6.1.2-linux-x86_64、logstash-6.1.2、redis-3.2.6、jdk1.8

1、服务端(所有软件全部安装)

ip:10.10.123.201

公网ip:123.206.57.23

hostname:VM_123_201_centos

2、客户端(安装jdk和logstash)

ip:10.10.30.86

hostname:VM_30_86_centos

三、服务端安装配置

1、安装redis

#!/bin/bash
yum -y install make gcc gcc-c++ zlib-devel openssl openssl-devel pcre-devel patch perl tcl 
cd /var/ftp/
tar xf redis-3.2.6.tar.gz
mv redis-3.2.6 /usr/local/redis
cd /usr/local/redis
make && make test && make install
if [ ! -d  "/usr/local/bin" ];   
then 
    mkdir -p /usr/local/bin
fi
ln -s  /usr/local/redis/redis.conf  /etc/redis.conf 
sed -i '/^daemonize no/cdaemonize yes' /etc/redis.conf
redis-server /etc/redis.conf         #启动redis服务
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
sysctl -p
cat> /etc/init.d/redis <<'EOF'
#!/bin/sh
# chkconfig:   2345 90 10
# description:  Redis is a persistent key-value database
# redis    Startup script for redis processes
# processname: redis
redis_path="/usr/local/bin/redis-server"
redis_conf="/etc/redis.conf"
redis_pid="/var/run/redis.pid"
# Source function library.
. /etc/rc.d/init.d/functions
[ -x $redis_path ] || exit 0
RETVAL=0
prog="redis"
# Start daemons.
start() {
if [ -e $redis_pid -a ! -z $redis_pid ];then
echo $prog" already running...."
exit 1
fi
echo -n $"Starting $prog "
# Single instance for all caches
$redis_path $redis_conf
RETVAL=$?
[ $RETVAL -eq 0 ] && {
touch /var/lock/subsys/$prog
success $"$prog"
}
echo
return $RETVAL
}
# Stop daemons.
stop() {
echo -n $"Stopping $prog "
killproc -d 10 $redis_path
echo
[ $RETVAL = 0 ] &&rm -f $redis_pid /var/lock/subsys/$prog
RETVAL=$?
return $RETVAL
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status $prog
RETVAL=$?
;;
restart)
stop
start
;;
condrestart)
if test "x`pidofredis`" != x; then
stop
start
fi
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart}"
exit 1
esac
exit $RETVAL
EOF
sleep 3
chmod 755 /etc/init.d/redis
chkconfig --add redis
chkconfig --level 2345 redis on
chkconfig redis on
service redis restart

2、安装elasticsearch

# vim /etc/sysctl.conf

vm.overcommit_memory=1

vm.overcommit_memory = 1

vm.max_map_count=262144

kernel.msgmax = 65536

kernel.msgmnb = 65536

# sysctl -p                                 #使配置生效

# vim /etc/security/limits.conf

*  hard nofile 65536

*  soft nofile 65536

# vim /etc/security/limits.d/90-nproc.conf

*          soft    nproc     4096

root       soft    nproc     unlimited

# groupadd elk
# useradd elk -g elk
# cd /data/elk/
# tar zxvf elasticsearch-6.1.2.tar.gzvim elasticsearch.yml

# vim /data/elk/elasticsearch-6.1.2/config/elasticsearch.yml

cluster.name: my-application

node.name: node-201

bootstrap.memory_lock: false

bootstrap.system_call_filter: false

network.host: 10.10.123.201

http.port: 9200

http.cors.enabled: true

http.cors.allow-origin: "*"

path.data: /usr/deploy/elk/elasticsearch-6.1.2/data

path.logs: /usr/deploy/elk/elasticsearch-6.1.2/logs

# chown -R elk:elk  /data/elk/elasticsearch-6.1.2/*
# su - elk
$ /data/elk/elasticsearch-6.1.2/bin/elasticsearch -d                             #启动elasticsearch服务

3、安装logstash+jdk

# cd /data/elk/
# tar zxf jdk-8u162-linux-x64.tar.gz
# mv  jdk-8u162-linux-x64  /opt/jdk1.8

# vim /etc/profile

export JAVA_HOME=/opt/jdk1.8

export  PATH=$JAVA_HOME/bin:$PATH

# source /etc/profile

# tar zxvf logstash-6.1.2.tar.gz

# vim /data/elk/logstash-6.1.2/config/input.conf

input {

redis {

type => "tomcat-10.10.30.86"

host => "123.206.57.23"

key => "tomcat"

data_type => 'list'

port => "6379"

db => "6"

}

redis {

type => "nginx-10.10.30.86"

host => "123.206.57.23"

key => "nginx"

data_type => 'list'

port => "6379"

db => "6"

}

filter {

if [type] == "nginx-10.10.30.86"{

geoip {

source => "clientip"

target => "geoip"

database => "/usr/deploy/elk/GeoLite2-City.mmdb"

add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]

add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}"  ]

}

}

}

output {

if [type] == "tomcat-10.10.30.86" {

elasticsearch {

hosts => ["123.206.57.23:9200"]

index => "logstash-tomcat-10.10.30.86-%{+YYYY.MM.dd}"

}

}

if [type] == "nginx-10.10.30.86" {

elasticsearch {

hosts => ["123.206.57.23:9200"]

index => "logstash-nginx-10.10.30.86-%{+YYYY.MM.dd}"

}

}

}

# cd /usr/deploy/elk/
# wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz          #地图的库
# gzip -d GeoLite2-City.mmdb.gz
# logstash-plugin install logstash-filter-geoip
# /data/elk/logstash-6.1.2/bin/logstash -f  /data/elk/logstash-6.1.2/config/input.conf       #启动logstash服务

4、安装kibana

# cd /data/elk/

# tar zxvf  kibana-6.1.2-linux-x86_64.tar.gz

# vim /usr/deploy/elk/kibana-6.1.2-linux-x86_64/config/kibana.yml

server.port: 5601

server.host: "0.0.0.0"

elasticsearch.url: http://10.10.123.201:9200

kibana.index: ".kibana"

tilemap.url: http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}          #地图显示链接

# /data/elk/kibana-6.1.2-linux-x86_64/bin/kibana &                             #后台运行kibana服务

四、客户端安装配置

# cd /data/elk/

# tar zxf jdk-8u162-linux-x64.tar.gz

# mv  jdk-8u162-linux-x64  /opt/jdk1.8

# vim /etc/profile

export JAVA_HOME=/opt/jdk1.8

export  PATH=$JAVA_HOME/bin:$PATH

# source /etc/profile

# tar zxvf logstash-6.1.2.tar.gz

# vim /data/elk/logstash-6.1.2/config/output.conf

input {

file {

path => "/usr/deploy/server/tomcat/tomcat1/logs/catalina*"

type => "tomcat-10.10.30.86"

start_position => "beginning"

codec => multiline {

pattern => "^\["

negate => true

what => "previous"

}

}

file {

path => "/usr/deploy/server/openresty/nginx/logs/access_json.log"

codec => json

type => "nginx-10.10.30.86"

start_position => "beginning"

}

}

output {

if [type] == "tomcat-10.10.30.86" {

redis {

host => "123.206.57.23"

key => "tomcat"

data_type => 'list'

port => "6379"

db => "6"

}

}

if [type] == "nginx-10.10.30.86" {

redis {

host => "123.206.57.23"

key => "nginx"

data_type => 'list'

port => "6379"

db => "6"

}

}

}

客户端nginx日志设置为json格式的日志,方便显示地图分布图

log_format json '{"@timestamp":"$time_iso8601",'

'"host":"$server_addr",'

'"clientip":"$remote_addr",'

'"size":$body_bytes_sent,'

'"responsetime":$request_time,'

'"upstreamtime":"$upstream_response_time",'

'"upstreamhost":"$upstream_addr",'

'"http_host":"$host",'

'"url":"$uri",'

'"domain":"$host",'

'"xff":"$http_x_forwarded_for",'

'"referer":"$http_referer",'

'"agent":"$http_user_agent",'

'"status":"$status"}';

access_log /usr/deploy/server/openresty/nginx/logs/access_json.log  json;

# /data/elk/logstash-6.1.2/bin/logstash -f  /data/elk/logstash-6.1.2/config/input.conf       #启动logstash服务

在浏览器访问:

http://123.206.57.23:5601

五、常用浏览器分析设置

1、显示top10 的ip地址条形统计图

2、在地图上显示访问ip的分布

3、饼状图显示各个时间段的访问数量

4、可以下载到本地的ip统计数据

图形定义完成后保存,在Dashboard面板添加定义好的图形,就显示一组我们需要的图形了。

Dashboard显示如下图:

原文地址:http://blog.51cto.com/qidian510/2107766

时间: 2024-11-06 18:12:12

elk分析nginx日志和tomcat日志的相关文章

ELK分析nginx日志(2)

目录 1.ES基本操作 ES&kibana 索引操作 增删改查 3.nginx 自定义提取字段 去除字段 时间轴 1.ES基本操作 Elasticsearch的概念 索引 ->类似于Mysql中的数据库 类型 ->类似于Mysql中的数据表 文档 ->存储数据 ES&kibana 测试Web接口 浏览器访问 Kibana操作:GET /出现下图所示的效果,说明kibana和ES联动成功. 索引操作 //创建索引 PUT /zhang //删除索引: DELETE /zha

ELK分析nginx日志

开源实时日志分析 ELK 平台能够完美的解决我们上述的问题, ELK 由 ElasticSearch . Logstash 和 Kiabana 三个开源工具组成.官方网站: https://www.elastic.co/products l   Elasticsearch 是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制, restful 风格接口,多数据源,自动搜索负载等. l   Logstash 是一个完全开源的工具,他可以对你的日志进行收集.分析,

nginx反向代理tomcat日志获取真实IP

今天测试一下nginx反向代理功能时,让tomcat日志里获取用户真实IP地址,谷歌了一下,都是一篇文章的内容,复制了tomcat配置文件中的要修改的内容,可怎么也获取不到,神奇了就!无奈之下,仔细读每行复制的内容,发现问题了,估计都要是搜索到那篇文章的话,都得无法获取真实IP地址,就一个小小的地方.开始检查配置内容: (1)nigix  nginx.conf配置文件中: proxy_set_header  Host $host; proxy_set_header  X-Real-IP $rem

ELK 分析nginx日志文件

注意:修改配置后建议重新创建index 1.nginx 日志文件格式 log_format elk "$http_clientip | $http_x_forwarded_for | $time_local | $request | $status | $body_bytes_sent | "  "$request_body | $content_length | $http_referer | $http_user_agent | "  "$http_c

用nginx指定访问tomcat日志

老大让我在nginx+tomcat的环境中满足以下需求: nginx指向某个页面,此页面内容包含了tomcat服务器中的各种日志文件 点击某日志文件后,即可显示该日志文件的内容 操作前的准备 安装并搭建好nginx,tomcat 一日志文件 我们知道,tomcat的日志文件在/tomcat/logs目录下 ls catalina.2016-03-04.log  host-manager.2016-03-04.log  localhost.2016-03-05.log           loca

使用ELK分析腾讯云CLB日志

缘起 最近在使用腾讯云,想对访问日志进行收集与分析,发现CLB(负责均衡)日志只能保存到COS上面,而且是每个CLB没小时压发送个gz压缩包到COS. 实现方式 CLB配置日志存储到COS,Filebeat客户端CVM安装cosfs挂载COS,并配置Filebeat输出到Elasticsearch集群,最后通过Kibana和Grafana分析. 参考文档 https://www.elastic.co/guide/en/logstash/current/lookup-enrichment.html

log4net VS2012 日志layout自定义,error日志和info日志分别记录到不同文件中

打开VS中“工具”=>“NuGet程序包管理器”=>“管理解决方案的NuGet程序包”菜单 在“管理NuGet程序包”窗口中,搜索log4net,并安装 有时候,我们在日志中需要记录一些业务数据,如operator等信息,我们新建一个类WebMethodLog,来存放log里面需要用到的信息 public class WebMethodLog { public string operatorNo{get;set;} public string operatorName { get; set;

分析nginx中access.log日志统计状态为500

发现系统存在的问题 我们可以使用下面的命令行,统计服务器返回的状态码,发现系统可能存在的问题. awk '{print $9}' access.log | sort | uniq -c | sort 正常情况下,状态码 200 或 30x 应该是出现次数最多的.40x 一般表示客户端访问问题.50x 一般表示服务器端问题. 下面是一些常见的状态码: 200 - 请求已成功,请求所希望的响应头或数据体将随此响应返回. 206 - 服务器已经成功处理了部分 GET 请求 301 - 被请求的资源已永

logstash分析nginx、dns日志

elk分析nginx.dns日志 部署环境 192.168.122.187 Logstash-1.5.1 elasticsearch-1.6.0 kibana-4.1.1 Centos6.4 192.168.122.1 Redis-2.8 Centos7.1 192.168.122.2 Nginx logstash-1.5.2 supervisor-2.1-9 java-1.7 Centos6.4 192.168.122.247 Bind9 logstash-1.5.2 supervisor-2