elk日志分析平台 (2)logstash数据采集和可视化

安装

安装两个包jdk和logstash直接安装即可
使用的时候

/usr/share/logstash/bin/logstash -e 'input { stdin { } } output { stdout{ } }'  ##标准输入 标准输出
[INFO ] 2020-03-21 22:40:41.312 [Api Webserver] agent - Successfully started Logstash API endpoint {:port=>9600}

在最底下一行看到Successfully就表示已经成功启动。下来就可以输入

test
{
       "message" => "test",
          "host" => "server4",
    "@timestamp" => 2020-03-21T14:44:37.887Z,
      "@version" => "1"

基本上就是你输入什么,他就输出什么。
或者直接输出至文件中。编写文件

vim /etc/logstash/conf.d/file.conf
input {
        stdin {}  ##标准输入
}

output {
        file {
        path => "/tmp/logstash"  ##输出目录
        codec => line { format => "custom format: %{message}"}
        }
}

使用的时候使用文件

[root@server4 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/file.conf  ##指定运行的文件
hello world      ##输入     
[INFO ] 2020-03-21 22:58:21.582 [[main]>worker1] file - Opening file {:path=>"/tmp/logstash"}  ##这里看到打开了一个文件
[root@server4 conf.d]# cat /tmp/logstash 
custom format: hello world
custom format: test
custom format: 1
custom format: asd

如何输出到elasticsearch中,编写文件

vim /etc/logstash/conf.d/es.conf
input {
        stdin {}
}

output {
        elasticsearch {
                hosts => "192.168.122.11:9200"  ##主机地址
                index => "logstash-%{+YYYY.MM.dd}"  ##输出索引的格式
        }
}
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/es.conf 

在里面输入内容

hello world
test

在浏览器中刷新,就可以看到新创建的两个组,再查看数据,可以看到输入项了。
在这里插入图片描述在这里插入图片描述

input来源

将input的来源设置为日志文件

input {
        file{
                path => "/var/log/messages"
                start_position => "beginning" ##从文件开头读取

        }
}
[root@server4 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/es.conf 

输出完成后在网页上进行查看就可以看到messages中的日志输出到了elasticsearch中
在这里插入图片描述

syslog输入插件

server4(logstash节点)中编写文件

vim /etc/logstash/conf.d/es.conf
input {
        syslog {   ##syslog模块
                port => 514   ##默认打开514端口
        }
}

output {
        stdout{ }
        elasticsearch {
                hosts => "192.168.122.11:9200"
                index => "rlogstash-%{+YYYY.MM.dd}"
        }
}

在server3上编辑日志采集文件

[root@server3 ~]# vim /etc/rsyslog.conf 
*.*     @@192.168.122.14:514  ##将所有日志发送到server4上的514端口。
[root@server3 ~]# systemctl restart rsyslog.service

在server3上更改完成再到4上启动

[root@server4 ~]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/es.conf 

启动完成后可以手动在server3上生成日志,这时server4上会直接进行输出,并且elasticsearch中也会显示新的日志信息

[root@server3 ~]# logger hello world

{
    "severity_label" => "Notice",
           "program" => "root",
          "facility" => 1,
           "message" => "hello world\n",
          "severity" => 5,
          "priority" => 13,
    "facility_label" => "user-level",
              "host" => "192.168.122.13",
          "@version" => "1",
        "@timestamp" => 2020-03-22T05:04:51.000Z,
         "timestamp" => "Mar 22 13:04:51",
         "logsource" => "server3"
}

在这里插入图片描述

多行过滤插件

input {
        stdin {
                codec => multiline { ##插件
                pattern => "^EOF"    ##定义结束点
                negate => "true"     ##判断
                what => "previous"   ##向哪个方向合并
                }
        }
}

output {
        stdout {}
}

文件编写完成运行。

[root@server4 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/test.conf 

这个时候可以一直输入,只要不输入我们定义的结束词他就不会结束

1
2
3
4
EOF ##输入EOF向上进行合并
/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/awesome_print-1.7.0/lib/awesome_print/formatters/base_formatter.rb:31: warning: constant ::Fixnum is deprecated
{
    "@timestamp" => 2020-03-22T05:22:23.820Z,
       "message" => "1\n2\n3\n4",
      "@version" => "1",
          "host" => "server4",
          "tags" => [
        [0] "multiline"
    ]
}

我们以ES的日志为例,这个日志是一个java日志,其中日志为多行输出,他们每一部分日志是一时间戳进行分开的,所以要读取my-es.log日志时可以使用公共的开头部分,比如说’['这个中括号。
因此我们要这样编写文件

input {
        file{
                path => "/var/log/my-es.log" ##日志位置
                start_position => "beginning" ##从开头读取
                codec => multiline {  ##多行输入
                pattern => "^\["   ##结束符号
                negate => "true"
                what => "previous"
                }

        }

}

output {
        stdout{ }
        elasticsearch {
                hosts => "192.168.122.11:9200"
                index => "myeslog-%{+YYYY.MM.dd}"
        }
}
[root@server4 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/es.conf 

在这里插入图片描述
在这里插入图片描述
运行完成可以刷新网页,这就看到了一个新的标题并且里面显示了所有日志。

过滤

编写新的conf文件

input {
        stdin { }
}
filter {   ##过滤模块
        grok {
                match => {"message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER: duration}"}  ##自己编写
        }
}
output {
        stdout {}
}
[root@server4 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/test.conf 

运行,我们输入一些信息这个过滤模块会将信息拆分

55.3.244.1 GET /index.html 15824 0.043

/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/awesome_print-1.7.0/lib/awesome_print/formatters/base_formatter.rb:31: warning: constant ::Fixnum is deprecated
{
         "bytes" => "15824",
      "@version" => "1",
          "host" => "server4",
        "method" => "GET",
    "@timestamp" => 2020-03-22T07:16:24.196Z,
        "client" => "55.3.244.1",
       "request" => "/index.html",
       "message" => "55.3.244.1 GET /index.html 15824 0.043"
}

这样就将信息拆分了出来,但是上面的过滤信息我们不会自己编写怎么办,可以到下面目录进行查找常用的模版进行使用。

[root@server4 conf.d]# cd /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-patterns-core-4.1.2/patterns/
[root@server4 patterns]# ls
aws     exim           httpd         maven                 nagios      ruby
bacula  firewalls      java          mcollective           postgresql  squid
bind    grok-patterns  junos         mcollective-patterns  rails
bro     haproxy        linux-syslog  mongodb               redis

下来可以用模版将信息输入到ES中进行查看,首先还是编写conf文件。

input {
        file{
                path => "/var/log/httpd/access_log"
                start_position => "beginning"
                }

        }
filter {
        grok {
                match => {"message" => "%{HTTPD_COMBINEDLOG}"}
        }
}

output {
        stdout{ }
        elasticsearch {
                hosts => "192.168.122.11:9200"
                index => "apachelog-%{+YYYY.MM.dd}"
        }
}

编写完成后运行,之后在网页上可以查看到所有信息。
在这里插入图片描述

kibana可视化

再启动一台虚拟机,这个机器上安装kibana并编辑配置文件。

[root@server5 ~]# vim /etc/kibana/kibana.yml 

server.port: 5601  ##打开端口
server.host: "192.168.122.15"  ##主机地址
server.name: "server5"  ##主机名
elasticsearch.hosts: ["http://192.168.122.11:9200"] ##ES地址
kibana.index: ".kibana" ##检索
i18n.locale: "zh-CN"  ##中文

配置完成启动

[root@server5 ~]# systemctl start kibana  ##启动时间会比较长
[root@server5 ~]# netstat -anltp
tcp        0      0 192.168.122.15:5601     0.0.0.0:*               LISTEN      9895/node     

端口5601启动了说明软件才启动,这时可以登陆网页查看。
在这里插入图片描述
进入之后我们可以自己创建索引模式,
在这里插入图片描述
这里面会将所有的ES索引都进行显示,下来我们需要进行筛选。再按照时间戳进行分类最后进行创建。之后我们更改索引模式,改为apache的日志索引。并且直接过滤我们需要的信息。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
过滤完了还不够,因为我们还要创建我们的可视化。
在这里插入图片描述
在这里插入图片描述
首先可以添加一个指标可视化查看我们的数据指标。创建完成进行保存。
在这里插入图片描述
保存完成点击右侧的dashboard,在点击仪表板创建新的仪表板。
在这里插入图片描述将刚创建的可视化进行添加并保存。
在这里插入图片描述
下来按照这个方法继续添加即可。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值