配置一台虚拟机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-stdin
和logstash-output-stdout
两个插件, Logstash还有filter
和codec
类插件,查看插件的方式是
/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/