ELK之六-----logstash结合redis收集系统日志和nginx访问日志

一、logstash结合redis收集系统日志

架构图:

环境准备:

A主机:elasticsearch主机     IP地址:192.168.7.100

B主机:logstash主机            IP地址:192.168.7.102

C主机:redis主机                IP地址:192.168.7.103

D主机:logstash主机/nginx主机          IP地址:192.168.7.101

1、安装并配置redis

1、安装并配置redis服务,并启动redis服务

[[email protected] ~]# yum install redis -y
[[email protected] ~]# vim /etc/redis.conf
bind 0.0.0.0  # 监听本地的所有地址
requirepass 123456  #为了redis安全,设置一个密码

[[email protected] ~]# systemctl restart redis  # 启动redis服务

2、在logstash-D主机安装logstash服务

1、先安装JDK、并创建软链接

[[email protected] ~]# cd /usr/local/src
[[email protected] src]# ls
jdk1.8.0_212  jdk-8u212-linux-x64.tar.gz  sonarqube-6.7.7  sonarqube-6.7.7.zip
[[email protected] src]# tar xvf jdk-8u212-linux-x64.tar.gz
[[email protected] src]# ln -s /usr/local/src/jdk-8u212-linux-x64.tar.gz  /usr/local/jdk
[[email protected] src]# ln -s /usr/local/jdk/bin/java /usr/bin/

2、配置JDK的环境变量,并使其生效

[[email protected] src]# vim /etc/profile.d/jdk.sh   # 设置JDK环境变量
export HISTTIMEFORMAT="%F %T `whoami`"
export export LANG="en_US.utf-8"
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

[[email protected] src]# .  /etc/profile.d/jdk.sh # 使JDK环境变量生效

3、安装logstash

[[email protected] src]# yum install logstash-6.8.1.rpm -y

[[email protected] ~]# vim /etc/profile.d/logstash.sh  # 定义logstash环境变量
export PATH=$PATH:/usr/share/logstash/bin/

[[email protected] ~]# . /etc/profile.d/logstash.sh  # 使环境变量生效

4、在/etc/logstash/conf.d目录下创建一个写入到redis日志的文件:redis-es.conf

input {
   file {
      path => "/var/log/messages"  # 收集档期那logstash日志文件
      type => "message-101"  # 日志类型
      start_position => "beginning"
      stat_interval => "2" # 间隔2s
      #codec => "json"
  }
}

output {
   if [type] == "message-101" {
   redis {
     host => "192.168.7.103" # 将日志传到103的redis主机
     port => "6379"  # redis的监听端口号
     password => "123456"  # redisa的登陆密码
     db => "1"  # redis的数据库类型,默认是0
     key => "linux-7-101-key"  #自定义的key
     data_type => "list" # 数据类型改为list
   }
 }
}

5、如果logstash服务是以logstash用户启动,将logstash系统日志的权限改为644,否则logstash系统日志无法访问。

[[email protected] conf.d]# vim /etc/systemd/system/logstash.service
[Unit]
Description=logstash

[Service]
Type=simple
User=root  #以root方式启动logstash服务,生产中最好以logstash服务启动
Group=root
# Load env vars from /etc/default/ and /etc/sysconfig/ if they exist.
# Prefixing the path with ‘-‘ makes it try to load, but if the file doesn‘t
# exist, it continues onward.
EnvironmentFile=-/etc/default/logstash
EnvironmentFile=-/etc/sysconfig/logstash
ExecStart=/usr/share/logstash/bin/logstash "--path.settings" "/etc/logstash"
Restart=always
WorkingDirectory=/
Nice=19
LimitNOFILE=16384

[Install]
WantedBy=multi-user.target

[[email protected] conf.d]# chmod 644 /var/log/messages  # 将系统日志权限进行修改。

6、启动logstash服务

# systemctl start logstash

3、开始测试logstash服务

1、在logstash服务上对/var/log/messages系统日志进行输入信息

[[email protected] src]# echo 11 >> /var/log/messages

2、在redis服务器上查登陆redis客户端查看此时显示的KEYS值

[[email protected] ~]# redis-cli -h 192.168.7.103
192.168.7.103:6379> auth 123456
OK
192.168.7.103:6379> SELECT 1
OK
192.168.7.103:6379[1]> KEYS *
1) "linux-7-101-key"  # 可以看到此时的logstash服务将logstash服务器的系统日志已经传递到redis服务器上

此时在第二台logstash主机上可以将系统日志传到redis主机上。

4、在logstash-B主机上配置

1、在/etc/logstash/conf.d目录下创建一个提取redis缓存日志文件

input {
   redis {
     host => "192.168.7.103"  # redis主机IP地址
     port => "6379"
     password => "123456"
     db => "1"
     key => "linux-7-101-key" # 取出对应的KEY值
     data_type => "list"
  }
}

output {
   if [type] == "message-101" { # 提取与第二台logstash主机的log类型一致
     elasticsearch {
       hosts => ["192.168.7.100:9200"] # elasticsearch主机的IP地址
       index => "message-7-101-%{+YYYY.MM.dd}"
     }
 }
}

2、重启B主机的logstash服务  

# systemctl restart logstash

3、此时在redis服务器上查看数据已经被logstash服务器采集到并传到了elasticsearch服务器上。

192.168.7.103:6379[1]> KEYS *
(empty list or set)  # 此时的redis服务器数据为空

5、在kibana控制台创建索引

1、创建收集到redis数据的索引

2、在discover选项中查看收集到的信息

二、logstash结合redis收集nginx访问日志

1、在D主机安装nginx服务并将log日志配置为json格式 

1、安装nginx服务,最好是源码编译,方便后期升级nginx版本

[[email protected] ~]# cd /usr/local/src
[[email protected] src]# wget http://nginx.org/download/nginx-1.14.2.tar.gz
[[email protected] src]# tar xvf nginx-1.14.2.tar.gz
[[email protected] nginx-1.14.2]# ./configure  --prefix=/apps/nginx  # 安装nginx,并制定安装目录
[[email protected] nginx-1.14.2]# make -j 2 && make install  # 编译安装nginx

2、修改nginx配置文件,并将log日志改为json格式/apps/nginx/conf/nginx.conf

    log_format access_json ‘{"@timestamp":"$time_iso8601",‘
        ‘"host":"$server_addr",‘
        ‘"clientip":"$remote_addr",‘
        ‘"size":$body_bytes_sent,‘
        ‘"responsetime":$request_time,‘
        ‘"upstreamtime":"$upstream_response_time",‘
        ‘"upstreamhost":"$upstream_addr",‘
        ‘"http_host":"$host",‘
        ‘"url":"$uri",‘
        ‘"domain":"$host",‘
        ‘"http_user_agent":"$http_user_agent",‘
        ‘"xff":"$http_x_forwarded_for",‘
        ‘"referer":"$http_referer",‘
        ‘"status":"$status"}‘;

    access_log  /var/log/nginx/access.log  access_json;  # 定义json格式的日志,并指定存放在/var/log/nginx目录下

[[email protected] nginx-1.14.2]# mkdir  /var/log/nginx  # 创建一个存放log日志的目录

  

3、启动nginx服务,并查看启动的80端口

[[email protected] nginx-1.14.2]# /apps/nginx/sbin/nginx
[[email protected] nginx-1.14.2]# ss -nlt
State       Recv-Q Send-Q                           Local Address:Port                                          Peer Address:Port
LISTEN      0      100                                  127.0.0.1:25                                                       *:*
LISTEN      0      511                                          *:80                                                       *:*
LISTEN      0      128                                          *:22                                                       *:*
LISTEN      0      100                                      [::1]:25                                                    [::]:*
LISTEN      0      50                          [::ffff:127.0.0.1]:9600                                                  [::]:*
LISTEN      0      128                                       [::]:22                                                    [::]:*

2、修改第logstash-D主机的配置文件  

1、在第二台logstash主机的/etc/logstash/conf.d目录下创建配置文件

input {
   file {
      path => "/var/log/messages"
      type => "message-7-101"
      start_position => "beginning"
      stat_interval => "2"
      #codec => "json"
  }
   file {
      path => "/var/log/nginx/access.log"
      type => "nginx-accesslog-7-101"
      start_position => "beginning"
      stat_interval => "2"
      codec => "json"
  }
}

output {
   if [type] == "message-7-101" {
   redis {
     host => "192.168.7.103"
     port => "6379"
     password => "123456"
     db => "1"
     key => "linux-7-101-key"
     data_type => "list"
   }}

   if [type] == "nginx-accesslog-7-101" {
   redis {
     host => "192.168.7.103"
     port => "6379"
     password => "123456"
     db => "1"
     key => "linux-nginxlog-7-101-key"
     data_type => "list"
   }
 }
}

2、重启logstash服务,将第一台的logstash主机服务停掉。

[[email protected] conf.d]# systemctl restart logstash

3、在redis主机上查看logstash主机是否已经将数据传到redis上

192.168.7.103:6379[1]> KEYS *
1) "linux-7-101-key"  # 系统日志
2) "linux-nginxlog-7-101-key"  # nginx日志

3、在logstash-A主机上修改配置文件 

1、在/etc/logstash/conf.d目录下创建一个提取redis数据的配置文件

input {
   redis {
     host => "192.168.7.103"
     port => "6379"
     password => "123456"
     db => "1"
     key => "linux-7-101-key"  # 与第二台的logstash服务器key对应
     data_type => "list"
  }
   redis {
     host => "192.168.7.103"
     port => "6379"
     password => "123456"
     db => "1"
     key => "linux-nginxlog-7-101-key"  # 与第二台logstash服务器对应
     data_type => "list"
  }
}

output {
   if [type] == "message-7-101" {  # 与第二台logstash服务器对应
     elasticsearch {
       hosts => ["192.168.7.100:9200"]
       index => "message-7-101-%{+YYYY.MM.dd}"
     }
 }
   if [type] == "nginx-accesslog-7-101" {  # 与第二台logstash服务器对应
     elasticsearch {
       hosts => ["192.168.7.100:9200"]
       index => "nginx-accesslog-7-101-%{+YYYY.MM.dd}"
     }
 }
}

2、重启logstash服务

# systemctl restart logstash

3、查看reids主机的数据,此时数据已经为空,被此台logstash服务器已经取走

192.168.7.103:6379[1]> KEYS *
(empty list or set)
192.168.7.103:6379[1]> KEYS *
(empty list or set)

4、在kibaba网页上创建索引

1、在kibana网页上创建索引

2、查看discover选项添加的索引信息

  

 

  

  

  

原文地址:https://www.cnblogs.com/struggle-1216/p/12491620.html

时间: 2024-10-12 21:38:13

ELK之六-----logstash结合redis收集系统日志和nginx访问日志的相关文章

ELK之八----Logstash结合kafka收集系统日志和nginx日志

一.logstash结合kafka收集系统日志和nginx日志 架构图: 环境准备: A主机:kibana.elasticsearch,有条件可以将两个服务器分开:192.168.7.100 B主机:logstash主机:192.168.7.101/nginx服务器也在此主机上 C主机:logstash主机:192.168.7.102 D主机:kafka/zookeeper:192.168.7.104 E主机:kafka/zookeeper:192.168.7.105 1.使用logstash-

ELK之logstash系统日志和nginx日志收集-4

logstash常用参数 1 path 是必须的选项,每一个file配置,都至少有一个path 2 exclude 是不想监听的文件,logstash会自动忽略该文件的监听.配置的规则与path类似,支持字符串或者数组,但是要求必须是绝对路径. 3 start_position 是监听的位置,默认是end,即一个文件如果没有记录它的读取信息,则从文件的末尾开始读取,也就是说,仅仅读取新添加的内容.对于一些更新的日志类型的监听,通常直接使用end就可以了:相反,beginning就会从一个文件的头

ELK收集Apache的json格式访问日志并按状态码绘制图表

前言 需求说明: 部署一个Apache,收集Apache的json格式访问日志,并且将访问日志的状态码在kibana上绘制饼状图,添加到kibana的dashboard. 环境说明: 10.0.0.101(test101)--部署apache.filebeat10.0.0.102(test102)--部署elasticsearch.kibana备注:本次实验的重点在于怎样收集Apache的json格式日志,因此没有装logstash.日志数据从filebeat--elasticsearch--k

ELK+syslog+nginx访问日志收集+分词处理

一.nginx访问日志配置: 1.日志格式配置: log_format json '{"@timestamp":"$time_iso8601",' '"host":"$server_addr",' '"clientip":"$remote_addr",' '"size":$body_bytes_sent,' '"xff":"$http_x

6月8日任务(12.10 Nginx访问日志 12.11 Nginx日志切割 12.12 静态文件)

课程名称:12.10?Nginx访问日志笔记内容: [[email protected] ~]# vim /usr/local/nginx/conf/nginx.conf定义日志格式combined_realip:日志格式名字,可以写任意,但是后面应用都要写这个log_format ys '$remote_addr $http_x_forwarded_for [$time_local]'' $host "$request_uri" $status'' "$http_refer

系统日志和loganalyzer

作为运维人员,熟悉系统日志是一项基本功.本文将介绍centos6的系统日志rsyslog及loganalyzer工具. 简介 系统日志:记录历史事件,通常都是按时间顺序将发生的事件予以记录,linux上的日志分为syslogd(系统进程相关日志)和klogd(内核事件日志) centos5:syslog 缺点:不能进行并行数据存储,效率低,不能实现放在专用数据管理文件中 centos6:rsyslog 优点: 1.支持多线程 2.基于tcp,tls,relp放在远程日志服务器中,早期的syslo

logstash 过虑nginx访问日志

标题是不是可以翻译成这样:logstash Filters nginx access log 好了,进入正题,日志管理服务器我用ElasticSearch+LogStash+Kibana+Redis 先说下我的架构: 远程NGINX采集日志数据到REDIS+logstash+elasticsearch+kibana服务器 至于怎么部署,因本人之前用baidu博客写在那上面了,以后有时间把百度的搬过来 好了,这里就先不说部署了,我们直接进入配置正题 在nginx服务器,我们一.先配置nginx的日

Linux系统下的Nginx的日志设置

(本文内所有centos的系统命令使用斜杠加粗的形式表示,方便各位阅读) 我想不少人跟我一样,在最开始接触Linux的时候,从心底是很反感的,明明放着windows那么图文并茂的系统不用,偏偏要搞这个黑乎乎的系统界面,总觉得有一种重返DOS的感觉.而且最重要的是,Windows的配置是在软件界面里,对着配置的地方点点鼠标或者选择一下地址栏等等,比较容易上手.而且windows的编辑界面都支持ctrl+z这个撤销命令,要是一些配置不小心被自己碰了,只要不关界面大不了就ctrl+z就能还原成原始的样

nginx访问日志 logstash 配置文件实例2

日志格式: log_format elk "$http_clientip | $http_x_forwarded_for | $time_local | $request | $status | $body_bytes_sent | "                   " $request_body | $content_length | $http_referer | $http_user_agent | "                   "$