欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Elasticsearch(三):ELK

程序员文章站 2022-03-28 16:06:38
Logstash的使用以及ELK项目应用...

一、Logstash

1.1 Logstash架构

Elasticsearch(三):ELK

  • Grok:匹配需要收集的字段信息
  • Date:处理日期类型
  • Geoip:添加地理位置信息
  • Useragent:提取请求用户信息
    Elasticsearch(三):ELK

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(三):ELK

② 读取Elasticsearch中数据

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

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

Elasticsearch(三):ELK

二、ELK项目

2.1 使用tomcat搭建项目

① 解压tomcat

②移动项目manager-testtomcatwebapp目录

③访问项目http://192.168.182.100:8080/manager-test/
Elasticsearch(三):ELK

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

Elasticsearch(三):ELK
④ 启动Nginx并访问如下网址

[root@hadoop100 nginx]# sbin/nginx

Elasticsearch(三):ELK

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均有日志输入
Elasticsearch(三):ELK
Elasticsearch(三):ELK

2.4 Kibana展示日志数据

① 在Kibana第一栏Discover可以可视化查看日志数据
Elasticsearch(三):ELK
② 在Visualize可以制作图表查看日志数据
Elasticsearch(三):ELK

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

相关标签: 大数据 JavaEE