• flink---实时项目--day01--1. openrestry的安装 2. 使用nginx+lua将日志数据写入指定文件中 3. 使用flume将本地磁盘中的日志数据采集到的kafka中去


    1. openrestry的安装

      OpenResty = Nginx + Lua,是⼀一个增强的Nginx,可以编写lua脚本实现⾮非常灵活的逻辑

    (1)安装开发库依赖

    yum install -y pcre-devel openssl-devel gcc curl

    (2)配置yum的依赖源

    yum install yum-utils
    yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo

    (3)安装OpenResty

    yum install openresty

    安装过程中出现问题的解决办法

    cd /etc/yum.repos.d
    yum install wget
    wget  https://openresty.org/package/centos/openresty.repo
    vi openresty.repo
    将https改成http(改两个地方)
    yum install openresty

    (4)openresty的默认安装⽬目录

    /usr/local/openresty

    (5)启动openresty(Nginx)

    /usr/local/openresty/nginx/sbin/nginx

    (6)通过浏览器器查看nginx的⻚页⾯面

      2.  使用nginx+lua将日志数据写入指定文件中

    需求:访问某个地址,nginx页面只显示1*1像素的空图片,然后将日志记录到指定的文件中去

    (1)创建存放日志的目录并设置权限

    mkdir /logs
    chmod o+w /logs

    为什么要设置权限呢,因为往logs的access.log文件写日志数据的用户是nobody,如下

    (2)vi  nginx.conf

    location /log.gif{
                #伪装成gif文件
                default_type 'image/gif';
                #关闭access_log
                access_log off;
                # 使用lua将nginx接受的参数写入到日志文件中
                log_by_lua_file 'conf/log.lua';
                #返回空图片
                empty_gif;
            }

    (3)在nginx的conf⽬目录下创建⼀一个log.lua⽂文件

    vi /usr/local/openresty/nginx/conf/log.lua

    log.lua脚本内容如下

    -- 引⼊入lua所有解析json的库
    local cjson = require "cjson"
    -- 获取请求参数列列表
    local request_args_tab = ngx.req.get_uri_args()
    -- 使⽤用lua的io打开⼀一个⽂文件,如果⽂文件不不存在,就创建,a为append模式
    local file = io.open("/logs/access.log", "a")
    -- 定义⼀一个json对象
    local log_json = {}
    -- 将参数的K和V迭代出来,添加到json对象中
    for k, v in pairs(request_args_tab) do
    log_json[k] = v
    end
    -- 将json写⼊入到指定的log⽂文件,末尾追加换⾏行行
    file:write(cjson.encode(log_json), "
    ")
    -- 将数据写⼊入
    file:flush()

    (4)在浏览器上请求feng05/log.gjf,能发现数据写入了/logs/access.log

     上诉做法存在一个问题:如果一直往一个⽂件中写入数据,这个日志文件会过大,造成读写效率变低,现在按照小时生成文件

    log.lua脚本内容修改如下所示

    -- 引⼊入lua⽤用来解析json的库
    local cjson = require "cjson"
    -- 获取请求参数列列表
    local request_args_tab = ngx.req.get_uri_args()
    -- 获取当前系统时间
    local time = os.date("%Y%m%d%H",unixtime)
    -- 使⽤用lua的io打开⼀一个⽂文件,如果⽂文件不不存在,就创建,a为append模式
    local path = "/mylog/access-" .. time .. ".log"
    local file = io.open(path, "a")
    -- 定义⼀一个json对象
    local log_json = {}
    -- 将参数的K和V迭代出来,添加到json对象中
    for k, v in pairs(request_args_tab) do
    log_json[k] = v
    end
    -- 将json写⼊入到指定的log⽂文件,末尾追加换⾏行行
    file:write(cjson.encode(log_json), "
    ")
    -- 将数据写⼊入
    file:flush()

    这样就会按照时间滚动生成日志文件了

     3. 使用flume将本地磁盘中的日志数据采集到的kafka中去

      此处数据采集的架构为flume+kafka(taildir+kafkachannel), 这样既能实现负载均衡又能使用高可用

    flume采集数据的配置文件如下所示:nginx-kafka.conf

    a1.sources = r1
    a1.channels = c1
    
    a1.sources.r1.type = TAILDIR
    a1.sources.r1.positionFile = /root/taildir_position.json    //此处表示taildir采集的记录,即偏移量
    a1.sources.r1.filegroups = f1
    a1.sources.r1.filegroups.f1 = /log/access-.*.log
    
    a1.channels.c1.type = org.apache.flume.channel.kafka.KafkaChannel
    a1.channels.c1.kafka.bootstrap.servers = feng05:9092,feng06:9092,feng07:9092
    a1.channels.c1.kafka.topic = access12
    a1.channels.c1.parseAsFlumeEvent = false
    
    a1.sources.r1.channels = c1
    View Code

    运行flume进行采集,数据即可采集至kafka中,命令如下

    /usr/apps/apache-flume-1.9.0-bin/bin/flume-ng agent -n a1 -c conf 
    -f myconf/nginx-kafka.conf 
    -Dflume.root.logger=INFO,console
    /usr/apps/kafka_2.11-2.4.0/bin/kafka-console-consumer.sh --bootstrap-server feng05:9092 --topic access --from-beginning
  • 相关阅读:
    商贸通帐套隐藏方法
    固定资产打开提示:上年度数据未结转!
    ZOJ 2432 Greatest Common Increasing Subsequence
    POJ 1080 Human Gene Functions
    POJ 1088 滑雪
    POJ 1141 Brackets Sequence
    POJ 1050 To the Max
    HDOJ 1029 Ignatius and the Princess IV
    POJ 2247 Humble Numbers
    HDOJ 1181 变形课
  • 原文地址:https://www.cnblogs.com/jj1106/p/13170999.html
Copyright © 2020-2023  润新知