分布式ELK平台之Kibana和Logstash

本文介绍了如何配置Kibana,包括安装、kibana.yml的配置以及数据导入后的日志展示。接着讲解了Logstash的安装、工作结构和类型条件判断,展示了Logstash配置文件的编写,并提到了Filebeat作为轻量级的日志收集工具的配置方法。
摘要由CSDN通过智能技术生成

配置一台虚拟机192.168.1.65
配置yum跟hosts解析

Kibana安装与配置

kibana是什么
  • 数据可视化平台工具
特点:
  • 灵活的分析和可视化平台
  • 实时总结流量和数据的图表
  • 为不同的用户显示直观的界面
  • 即时分享和嵌入的仪表板
kibana安装
  • kibana 的安装非常简单,我们使用 rpm 方式安装
    yum -y install kibana
  • kibana 默认安装在 /opt/kibana 下面,配置文件在/opt/kibana/config/kibana.yml
  • 我们只需要修改少量的配置就可以启动
kibana.yml的配置
[root@kibana ~]# vim /opt/kibana/config/kibana.yml

...	...
server.port: 5601			//端口号
server.host: "0.0.0.0"		//本机监听地址
elasticsearch.url: "http://es-node1:9200"     //任意一个节点都行
kibana.index: ".kibana"		//索引名称
kibana.defaultAppId: "discover"
elasticsearch.pingTimeout: 1500
elasticsearch.requestTimeout: 30000
elasticsearch.startupTimeout: 5000
...	...
  • 除elasticsearch.url需要配置为我们ES集群的地址之外,其他保持默认值
  • 设置开机启动
[root@kibana ~]# systemctl enable kibana
[root@kibana ~]# systemctl start kibana
  • web访问kibana
http://192.168.1.65:5601/

数据导入以后查看logs是否导入成功

在这里插入图片描述
修改Kibana的配置文件后启动Kibana,然后查看ES集群,如果出现.kibana Index表示Kibana与ES集群连接成功
在这里插入图片描述

Kibana里选择日志
  • 支持通配符 *
  • 我们这里选择logstash-*
  • 在下面的Time-field选择@timestramp作为索引
  • 然后点create按钮

在这里插入图片描述

在这里插入图片描述
导入成功以后选择Discover
在这里插入图片描述

修改时间,显示日志时间范围内的数据
在这里插入图片描述

在这里插入图片描述

数据展示
在这里插入图片描述

Kibana展示方式

除了柱状图,Kibana还支持很多种展示方式
在这里插入图片描述

饼图与列表,多种维度自定义统计分析
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
定义子查询
在这里插入图片描述

在这里插入图片描述
列表与饼图

在这里插入图片描述
保存后可以在Dashboard查看

在这里插入图片描述

Logstash配置扩展插件

准备两台虚拟机192.168.1.66(logstash),192.168.1.67(apache)

Logstash是什么
  • 是一个数据采集、加工处理以及传输的工具
特点
  • 所有类型的数据集中处理
  • 不同模式和格式数据的正常化
  • 自定义日志格式的迅速扩展
  • 为自定义数据源轻松添加插件
Logstash安装
  • Logstash依赖Java环境,需要安装java-1.8.0-openjdk
  • Logstash没有默认的配置文件,需要手动配置
  • Logstash安装在/opt/logstash目录下
[root@logstash ~]# yum -y install java-1.8.0-openjdk
[root@logstash ~]# yum -y install logstash
[root@es-web ~]# yum -y install httpd
[root@es-web ~]# systemctl restart httpd
[root@es-web ~]# systemctl enable httpd
Logstash工作结构
{ 数据源 } ==>
	input { } ==>
		filter { } ==>
			output { } ==>
					{ ES }
Logstash类型及条件判断
Logstash里面的类型
  • 布尔值类型: ssl_enable => true
  • 字节类型:
    bytes => “1MiB”
  • 字符串类型: name => “xkops”
  • 数值类型: port => 22
  • 数组: match => [“datetime”,“UNIX”]
  • 哈希: options => {k => “v”,k2 => “v2”}
  • 编码解码: codec => “json”
  • 路径: file_path => “/tmp/filename”
  • 注释: #

Logstash条件判断

  • 等于: ==
  • 不等于: !=
  • 小于: <
  • 大于: >
  • 小于等于: <=
  • 大于等于: >=
  • 匹配正则: =~
  • 不匹配正则: !~
  • 包含: in
  • 不包含: not in
  • 与: and
  • 或: or
  • 非与: nand
  • 非或: xor
  • 复合表达式: ()
  • 取反符合:!()

Logstash配置文件

  • Logstash的第一个配置文件
[root@logstash ~]# vim /etc/logstash/logstash.conf

input{
  stdin{}
}
filter{ }
output{
  stdout{}
}

启动并验证
//制定配置文件

[root@logstash ~]# /opt/logstash/bin/logstash -f /etc/logstash/logstash.conf

插件

Logstash插件
  • 上页的配置文件使用了logstash-input-stdinlogstash-output-stdout两个插件, Logstash还有filtercodec类插件,查看插件的方式是
    /opt/logstash/bin/logstash-plugin list
  • 插件及文档地址
    https://github.com/logstash-plugins
codec类插件
  • 常用的插件:plain、json、json_lines、rubydebug、multiline等
  • 使用刚刚的例子,这次输入json数据
  • 设置输入源的codec是json,在输出的时候选择rubydebug
[root@logstash ~]# vim /etc/logstash/logstash.conf

input{
 stdin{ codec => "json" }
}
filter{}
output{
 stdout{ codec => "rubydebug" }
}

[root@logstash ~]# /opt/logstash/bin/logstash -f /etc/logstash/logstash.conf

输入普通数据和json对比
{"a": 1, "c": 3, "b": 2}
input file插件
file{
  start_position => "beginning"
  sincedb_path => "/var/lib/logstash/sincedb-access"
  path => [“/tmp/a.log”, “/tmp/b.log”]
  type => 'filelog'  
}
  • sincedb_path记录读取文件的位置"beginning"/“end”
  • start_position配置第一次读取文件从什么地方开始
  • type主要用于过滤器激活
[root@logstash ~]# vim /etc/logstash/logstash.conf

input {
  file {
    start_position => "beginning"
    sincedb_path => "/var/lib/logstash/sincedb-access"
    path => ["/tmp/a.log","/var/tmp/b.log"]
    type => 'filelog'
  }
}
filter{}
output{
 stdout{ codec => "rubydebug" }
}

[root@logstash ~]# /opt/logstash/bin/logstash -f /etc/logstash/logstash.conf

重启一个终端,测试写入日志,查看打印

[root@logstash ~]# echo A_${RANDOM} >> /tmp/a.log 
[root@logstash ~]# echo B_${RANDOM} >> /var/tmp/b.log 
filter grok插件
  • 解析各种非结构化的日志数据插件
  • grok使用正则表达式把非结构化的数据结构化
  • 在分组匹配,正则表达式需要根据具体数据结构编写
  • 虽然编写困难,但适用性极广
  • 几乎可以应用于各类数据
grok{
   match => [ "message", "%{IP:ip}, (?<key>reg)" ]
}

grok正则分组匹配

  • 匹配ip时间戳和请求方法
    "(?<ip>(\d+\.){3}\d+) \S+ \S+(?<time>.*\])\s+\"(?<method>[A-Z]+)"]
  • 使用正则宏
    %{IPORHOST:clientip} %{HTTPDUSER:ident} %{USER:auth}\[%{HTTPDATE:timestamp}\] \"%{WORD:verb}
  • 最终版本
    %{COMMONAPACHELOG} \"(?<referer>[^\"]+)\"\"(?<UA>[^\"]+)\

系统正则宏的定义文件路径

[root@logstash ~]# ls /opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-2.0.5/patterns/

初始化所有的数据
删除kibana数据
删除Elasticsearch数据

[root@es-node5 ~]# curl -XDELETE http://192.168.1.64:9200/*
[root@kibana ~]# systemctl restart kibana
output ES插件
if [type] == "filelog"{
  elasticsearch {
    hosts => ["192.168.1.61:9200", "192.168.1.62:9200"]
    index => "filelog"
    flush_size => 2000
    idle_flush_time => 10
  }
}
  • 调试成功后,把数据写入ES集群
input filebeats插件
beats {
  port => 5044
}
  • 这个插件主要用来接收beats类软件发送过来的数据,由于logstash依赖JAVA环境,而且占用资源非常大,因此会使用更轻量的filebeat替代
filebeat安装配置
# yum –y install filebeat
  • 修改配置文件/etc/filebeat/filebeat.yml
  • 设置开机运行
# systemctl enable filebeat
  • 开启服务
# systemctl start filebeat

配置web服务器跟logstash服务器,将web服务器的访问日志,发往logstash服务器处理后保存到elasticsearch,在kibana上查看统计信息

(1)web服务器安装filebeat包,将日志文件发送到制定的ip跟端口

[root@es-web ~]# yum -y install filebeat

(2)修改配置文件

[root@es-web ~]# vim /etc/filebeat/filebeat.yml

...	...
paths:       //定义要发送的log日志文件路径
        - /var/log/httpd/access_log     
...	...
document_type: apache_log		//文件类型,用于接收日志的时候过滤
...	...
 #elasticsearch:
...		...
    #hosts: ["localhost:9200"]
...		...
logstash: 		//定义logstash服务器地址跟监听端口
    hosts: ["192.168.1.66:5044"]
...	...

(3)重启服务,设置开机自启

[root@es-web ~]# systemctl restart filebeat
[root@es-web ~]# systemctl enable filebeat

(4)修改logstash服务器配置文件,设置监听端口跟日志输出ES插件

[root@logstash ~]# vim /etc/logstash/logstash.conf 

input {
  file {
    start_position => "beginning"
    sincedb_path => "/var/lib/logstash/since.db"
    path => ["/tmp/a.log"]
    type => 'testlog'
  }
  beats{
    port => 5044   //定义数据接收监听端口
  }

}
filter{
  if [type] == "apache_log"{		//数据过滤,只有apache_log的数据才处理
    grok {
      match => { "message" => "%{COMBINEDAPACHELOG}" }
      }
   }
}
output{
 if [type] == "apache_log"{   //数据过滤,只有apache_log的数据才处理
   elasticsearch {
      hosts => ["192.168.1.61:9200", "192.168.1.62:9200"]    //Elasticsearch节点中的任意几个服务器,写两个是为了实现冗余,提高可靠性
      index => "weblog"
      flush_size => 2000  	//更新的数据攒够2000个字节再写入
      idle_flush_time => 10  	//间隔10s,数据库写入一次数据
   }
 #  stdout{ codec => "rubydebug" }
  }
}

(5)启动配置文件

[root@logstash ~]# /opt/logstash/bin/logstash -f /etc/logstash/logstash.conf

(6)浏览器访问web服务器,观察Elasticsearch和kibana数据统计

firefox http://192.168.1.64:9200/_plugin/head/
firefox http://192.168.1.65:5601/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值