1+x 2020年数据采集证书(中级)实操试卷一

1+x 2020年数据采集证书(中级)实操试卷一

采集工具运用题

#一、数据采集任务场景一(工具定制题) 使用 apache httpd、filebeat、logstash、csv完成数据采集演示。 ## 1、数据场景: ### apache httpd: 运行目录:/app/httpd/ ### filebeat 安装路径:/bigData/tools/filebeat/ 配置文件:/bigData/tools/filebeat/filebeat.yml ### logstash 安装路径:/bigData/tools/logstash/ 配置文件:/bigData/tools/logstash/config/logstash-filebeat-csv.conf

题目要求:

## 2、采集要求 1)apache httpd的配置文件修改 1.1)找到apache httpd配置文件 1.2)根据apache httpd配置文件找到access日志文件。 1.3)修改apache httpd配置文件中的apache端口为8097,然后重启apache。 1.4)通过火狐浏览器直接访问apache服务,产生新的日志数据。 2)在filebeat里配置采集的apache httpd的access日志文件路径 3)使用采集工具(filebeat)收集apache httpd的access日志数据 4)通过filebeat输出到logstash,在logstash里收集信息,通讯端口是5044。 5)通过logstash使用 HTTPD_COMMONLOG 正则规则拆分日志数据。 6)通过logstash输出到csv文件中(/home/output/httpd-outfile.csv)。 7)httpd-outfile.csv内容说明:包含"timestamp" ,"verb", "httpversion"这三个属性信息,用4个空格分隔。 ## 3、提交的内容 1)filebeat的配置文件 2)logstash的配置文件 3)csv结果文件

1)filebeat的配置文件

filebeat.inputs:

- type: log

  # to do   

enabled: true

  # to do  

paths:   

 - /app/httpd/logs/access_log

filebeat.config.modules: 

  path: ${path.config}/modules.d/*.yml

  reload.enabled: false 

setup.template.settings:

  index.number_of_shards: 3

setup.kibana:

output.logstash:

  # to do The Logstash hosts 

 hosts: ["localhost:5044"]

processors:  

- add_host_metadata: ~

 - add_cloud_metadata: ~

评分标准

2)logstash的配置文件

# Sample Logstash configuration for creating a simple# Beats -> Logstash -> Elasticsearch pipeline.

input {    # to do

    beats {

    port => 5044

  }}filter {     # to do

  grok {

    match => { "message" => "%{HTTPD_COMMONLOG}" }

}}output {

csv {

path => "/home/output/httpd-outfile.csv"

fields => ["timestamp" ,"verb", "httpversion"]

csv_options => {"col_sep" => "    "}

}



    stdout{

        codec => rubydebug #格式化

    }

    }  

评分标准

25分

 3)csv结果文件

"27/Jul/2020:15:52:47 +0800"    GET    1.1  

评分标准

采集结果:15 分. 采集结果文件中至少包含一条数据。数据内容参考如下: "27/Jul/2020:15:30:47 +0800" GET 1.1 这一条数据中的三个数据项值分别是5分。 第一个数据是时间,时间要包含 27/Jul/2020 这个关键数据。 第二个数据是请求方法值。可以是GET、POST、PUT、DELETE等其中一个。 第三个数据是HTTP版本号。值可以是 1.1 。

编程题

题目说明:

# 一、数据采集任务场景一(编程开发) ## 1、数据场景: ### 采集网站 http://117.73.11.244:9090/ ### chrome浏览器启动 启动chrome:/opt/google/chrome/google-chrome --no-sandbox ### python开发工具启动 启动pycharm:/home/pycharm-community-2020.1.1/bin/pycharm.sh ### 工程目录说明 工程目录是:/root/PycharmProjects/crawler ### 编程文件 代码文件路径: /root/PycharmProjects/crawler/src/webcrawler.py

题目要求:

  1. 采集要求 1)使用python采集一个指定网站的首页。 2) 对获取到的响应网页内容进行冗余数据剔除。 2.1)使用正则去掉网页中的<script>元素及其包含的内容。 2.2)使用正则去掉网页中的<style>元素及其包含的内容。 3)采集目标:对于id值是"head_nav_list"的<ul>元素,获取其所有子元素<li>里的下级元素<a>中的href属性值 4)将结果存放到csv格式的文件里。结果文件路径:/home/output/crawler_result.csv 5)结果文件的要求:每一行存放 一个 href 值。 6)必须要有异常捕捉处理。 ## 3、提交的内容 1)代码文件:webcrawler.py 2)采集结果:crawler_result.csv

1)代码文件:webcrawler.py

#!/usr/bin/env python# -*- coding: utf-8 -*-

import time

import urllib, time, os, base64, json

import re, sys

import urllib

from lxml import etree

import requests #对获取到的响应网页内容进行冗余数据剔除。

def getPage(base_url):

    try:

        page = urllib.request.urlopen(base_url)  # 5

        content = page.read().decode("utf-8", "ignore").lower()  

               

        re_script=re.compile('<\s*script[\S\s]*<\s*/\s*script\s*>',re.I) #Script     [\\S\\s]+?使用正则去掉网页中的<script>元素及其包含的内容。

        re_style=re.compile('<\s*style[^>]*>[^<]*<\s*/\s*style\s*>',re.I) #style使用正则去掉网页中的<style>元素及其包含的内容。



        content=re_script.sub('',content) #去掉SCRIPT

        content=re_style.sub('',content)#去掉style

        selector = etree.HTML(content.encode("utf-8",'ignore'))

        # answer one

        # menu_items = selector.xpath("/html/body/header/div/ul[@id='head_nav_list']/li/a") # 5

        # for item in menu_items:

        #     writefile("/home/output/crawler_result.csv", item.attrib.get("href")) # 2



        # answer two

        menu_items = selector.xpath("/html/body/header/div/ul[@id='head_nav_list']/li/a/@href")  # 5

        for item in menu_items:

            writefile("/home/output/crawler_result.csv", item)  # 2



    except Exception as e:  # 3

        print("Failed to read from %s." % base_url)

        print(sys.exc_info())

        return False

def writefile(filename, content):

    try:

        fp = open(filename, 'a') # 5

        fp.write(content + "\n") # 5

        fp.close()  # 5

    except:

        return False



now = time.strftime('%Y-%m-%d %X', time.localtime(time.time()))

try:

    # 5

    url = 'http://117.73.9.229:9090/'

    getPage(url)

except Exception as e:

    info = '%s\nError: %s' % (now, e)

    writefile('Error.log', info)

    print (info)

    time.sleep(1)

评分标准

35分

2)采集结果:crawler_result.csv

/
http://www.inspuredu.com/sysConfigItem/showList

http://www.inspuredu.com/classPackage/findAll

http://www.moe.gov.cn/jyb_xwfb/s271/201904/t20190416_378207.html

http://www.inspuredu.com/sysNews/list.html

http://www.inspuredu.com/tikuIndex/toIndex

http://www.inspuredu.com/question/comQuestionIndex

评分标准

15分

  • 8
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
flume是一个分布式、可靠、高可用的数据采集、聚合和传输系统。在数据采集方面,flume可以很好地与nginx、kafka、mongodb等常见的数据处理工具和数据库进行集成。下面介绍一下基于nginx+flume+kafka+mongodb实现埋点数据采集的步骤: 1. 配置nginx服务器,将所有的http请求都转发到flume服务器上。可以使用nginx的proxy_pass指令来实现。 2. 在flume服务器上,配置flume agent来接收nginx服务器转发过来的http请求,并将请求数据转发给kafka服务器。flume的配置文件中需要设置source、channel和sink三个部分,具体配置可以参考flume官方文档。 3. 在kafka服务器上,创建一个topic来存储flume发送过来的http请求数据。可以使用kafka的命令行工具kafka-topics来创建topic。 4. 在flume服务器上,配置一个kafka sink来将http请求数据发送到kafka服务器上的指定topic中。 5. 在mongodb数据库中创建一个collection来存储http请求数据。可以使用mongodb的命令行工具mongo来创建collection。 6. 在flume服务器上,配置一个mongodb sink来将http请求数据从kafka服务器中消费,并将其存储到mongodb数据库中的指定collection中。 7. 启动nginx、flume、kafka和mongodb服务,并进行测试。可以使用curl等工具模拟http请求,并查看数据是否能够被成功采集、存储到mongodb中。 以上就是基于nginx+flume+kafka+mongodb实现埋点数据采集的基本步骤。需要注意的是,具体的配置和实现过程可能会因为不同的业务需求而有所差异。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值