当前位置: 移动技术网 > IT编程>开发语言>Java > Elasticsearch(三):ELK

Elasticsearch(三):ELK

2020年07月26日  | 移动技术网IT编程  | 我要评论

一、Logstash

1.1 Logstash架构

在这里插入图片描述

  • Grok:匹配需要收集的字段信息
  • Date:处理日期类型
  • Geoip:添加地理位置信息
  • Useragent:提取请求用户信息
    在这里插入图片描述

1.2 Logstash安装

① 解压

[root@hadoop100 software]# tar -zxvf logstash-6.3.1.tar.gz -C /opt/module

② 测试

[root@hadoop100 config]# vim test.conf
input {
  stdin { }
}
output {
stdout {codec=>"rubydebug"}
}

[root@hadoop100 logstash-6.3.1]# ./bin/logstash -f ./config/test.conf
hello
{
          "host" => "hadoop100",
    "@timestamp" => 2020-07-25T03:42:43.902Z,
       "message" => "hello",
      "@version" => "1"
}

1.3 Logstash配置文件规范

1.3.1 input

①stdin

input{
	stdin{
		codec => “plain”
		tags => [“test”]
		type => “std”
		add_field => {“key”=>”value”}
	}
}

stdin:输入插件:可以管道输入,也可以从终端交互输入

通用:

  • codec:类型为codec
  • tags:类型为array,自定义事件的tag,可用于后续判断
  • type:类型为string自定义该事件类型,可用于后续判断
  • add_field:类型为hash,为该事件添加字段

② file

input {
	file {
		path => ["/home/elk/logstash/config/nginx_logs"]
		start_position => "beginning"
		type => "web"
	}
}

file:从文件读取数据,如常见的日志文件

配置:

  • path => [“/var/log/**/*.log”,”/var/log/message”]:文件位置
  • exclude => “*.gz”:不读取哪些文件
  • sincedb_path => “/var/log/message”:记录sincedb文件路径
  • start_position => “beginning”:或者end,是否从头读取文件
  • stat_interval => 1000:单位秒,定时检查文件是否有更新,默认1秒

1.3.2 filter

filterLogstsh功能强大的原因,它可以对数据进行丰富的处理,比如解析数据、删除字段、类型转换等。

filter {
 date {
  match => ["logdate","MM dd yyyy HH:mm:ss"]
 }
}
  • date:日期解析
  • grok:正则匹配解析
  • dissect:分割符解析
  • mutate:对字段作处理,比如重命名、删除、替换等
  • json:按照json解析字段内容到指定字段中
  • geoip:增加地理位置数据
  • ruby:利用ruby代码来动态修改logstsh Event

1.3.3 ouput

① 输出到命令行

output {
	stdout {
		codec => rubydebug
	}
}

② 输出到文件

output {
	file {
		path => “/var/log/web.log”
		codec => line {format => “%{message}”}
	}
}

③ 输出到Elasticsearch

output {
	elasticsearch {
		hosts => ["http://192.168.182.100:9200"]
		index => "logstash-%{type}-%{+YYYY.MM.dd}"
	}
}

1.4 Logstash操作

① 读取指定文件

input {
 file {
  path => ["/root/nginx_logs"]
  start_position => "beginning"
  type => "web"
 }
}

output {
 stdout {
  codec => "rubydebug"
 }
}

在这里插入图片描述

② 读取Elasticsearch中数据

input {
  elasticsearch {
    hosts => "192.168.182.100"
    index => "china"
    query => '{ "query": { "match_all": {} }}'
  }
}

output {
 stdout {
  codec => "rubydebug"
 }
}

在这里插入图片描述

二、ELK项目

2.1 使用tomcat搭建项目

① 解压tomcat

②移动项目manager-testtomcatwebapp目录

③访问项目http://192.168.182.100:8080/manager-test/
在这里插入图片描述

2.2 使用Nginx进行负载均衡

① 安装Nginx环境

yum install -y gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-deve

② 编译安装Nginx

[root@hadoop100 software]# tar -zxvf nginx-1.15.1.tar.gz

[root@hadoop100 software]# cd nginx-1.15.1

[root@hadoop100 nginx-1.15.1]# ./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi

[root@hadoop100 nginx-1.15.1]# make

[root@hadoop100 nginx-1.15.1]# make install

② 编译安装Nginx

③ 修改Nginx配置文件

[root@hadoop100 nginx-1.15.1]# vim /usr/local/nginx/conf/nginx.conf

在这里插入图片描述
④ 启动Nginx并访问如下网址

[root@hadoop100 nginx]# sbin/nginx

在这里插入图片描述

2.3 Logstash监控Nginx日志

① 创建logstash配置文件

input {
	file {
		path => ["/var/log/nginx/access.log"]
		type => "nginx_access"
		#start_position => "beginning"
	}
}
filter {
	if [type] == "nginx_access" {
		grok {
			patterns_dir => "/root/patterns/"
			match => {
				"message" => "%{NGINXACCESS}"
			}
		}
		
		date {
			match => ["timestamp","dd/MMM/YYY:HH:mm:ss Z"]
		}

		if [param] {
			ruby {
				init => "@kname = ['quote','url_args']"
				code => "
					new_event = 
					LogStash::Event.new(Hash[@kname.zip(event.get('param').split('?'))])
					new_event.remove('@timestamp')
					event.append(new_event)
				"
			}			
		}

		if [url_args] {
			ruby {
				init => "@kname = ['key','value']"
				code => "event.set('nested_args',event.get('url_args').split('&').cllect{|i| Hash[@kname.zip(i.split('='))]})"
				remove_field => ["url_args","param","quote"]
			}
		}

		mutate {
			convert => ["response","integer"]
			remove_field => "timestamp"
		}
	}
}
output {
	stdout {
		codec => rubydebug
	}
	
	elasticsearch {
		hosts => ["http://192.168.182.100:9200"]
		index => "logstash-%{type}-%{+YYYY.MM.dd}"
	}
}

② 启动logstash

③ 访问项目目录,此时可以发现控制台和Elaticsearch均有日志输入
在这里插入图片描述
在这里插入图片描述

2.4 Kibana展示日志数据

① 在Kibana第一栏Discover可以可视化查看日志数据
在这里插入图片描述
② 在Visualize可以制作图表查看日志数据
在这里插入图片描述

本文地址:https://blog.csdn.net/qq_38697437/article/details/107353355

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网