救救家长:疫情封控下packetbeat+kafka+ES套件监控青少年上网行为
緣起
疫情,不少孩子封控在家,需要上網(wǎng)課,但是老是抑制不住地去打游戲或看視頻。
朋友圈里面,某位技術(shù)大牛這么描述疫情封控期間,他與孩子的居家“戰(zhàn)爭”:
孩子上網(wǎng)課已經(jīng)一個(gè)多月了,孩子因?yàn)閻弁嬗螒驉劭碆站,與我斗智斗勇好幾回,目前戰(zhàn)斗情況如下:
上課時(shí)間玩手機(jī)游戲 ~ 沒收手機(jī)
在電腦上裝手機(jī)模擬器 繼續(xù)玩手機(jī)游戲 ~ 卸載模擬器
在電腦上看B站 ~ 設(shè)置host文件屏蔽B站域名
在電腦上看芒果TV ~ 繼續(xù)設(shè)置屏蔽域名
繼續(xù)安裝手機(jī)模擬器、找到host文件刪除屏蔽,看B站玩游戲 ~ 被打,被卸載各種軟件,被警告再發(fā)現(xiàn)就換Linux操作系統(tǒng)
解封后,先買個(gè)企業(yè)級路由器管控起來… 或者再裝個(gè)攝像頭再加上AI人體姿態(tài)識別?😭
因本文是技術(shù)文章,在這里咱暫先不討論教育之道,先提供一個(gè)技術(shù)方案,解決家長的燃眉之急,不用企業(yè)級路由器,也不用AI人體姿態(tài)識別。
我的方案是:packetbeat+kafka+ES套件,以大數(shù)據(jù)可視化方式監(jiān)控孩子。
這個(gè)方案的特點(diǎn):
- 一是抓住了矛盾的主要方面,疫情封控期間,孩子因網(wǎng)課有正當(dāng)理由使用電腦等設(shè)備,監(jiān)控重點(diǎn)是上網(wǎng)行為,尤其在上課時(shí)間段內(nèi)不能打游戲看視頻
- 二是最大程度利用了現(xiàn)有設(shè)備,不需要額外添置監(jiān)控設(shè)備
架構(gòu)設(shè)計(jì)
架構(gòu)設(shè)計(jì)上有個(gè)難點(diǎn),我的方案中考慮了異地監(jiān)控的情況,比如孩子在杭州上課,我在新加坡工作,考慮跨國網(wǎng)絡(luò)的不穩(wěn)定性,我在常規(guī)的packetbeat和ES集群之間,加了一個(gè)準(zhǔn)備放在阿里云上的kafka消息隊(duì)列,這樣就不用穿透內(nèi)網(wǎng),也不怕網(wǎng)絡(luò)不穩(wěn)丟消息了,遠(yuǎn)在新加坡Shopee云的監(jiān)控主機(jī)可以用異步方式讀取kafka。
效果展示
監(jiān)控實(shí)圖1:
監(jiān)控實(shí)圖2:
孩子訪問了啥網(wǎng)站,啥時(shí)候訪問,網(wǎng)絡(luò)地址、流量情況一應(yīng)俱全:) 雖然和教育的目的相背,但是國內(nèi)就好這一口不是😄 IT前輩大牛目前還在用物理手段,我已經(jīng)升級到 云+大數(shù)據(jù)了,我要把這個(gè)項(xiàng)目開源,造福中國的父母,嘿嘿
安裝運(yùn)行
注意版本問題!如下未特別說明的,都采用7.8.1版本,版本不匹配會有坑。
packetbeat
總體過程是:官網(wǎng)下載,unzip解壓到本地目錄,配置yml文件,后啟動運(yùn)行
10360* sudo ./packetbeat -e -c packetbeat.yml 10362 cd packetbeat-7.8.1-darwin-x86_64 10363* sudo ./packetbeat setup --dashboards 10364* sudo ./packetbeat -e -c packetbeat.yml配置packetbeat.yml 輸出到Kafka
# ---------------------------- Kafka ------------------------------------------- output.kafka:hosts: ["localhost:9092"]topic: packetbeatrequired_acks: 1Kafka
采用docker-compose方式安裝
version: '3' services:zookeeper:image: wurstmeister/zookeepercontainer_name: zookeeperports:- 2181:2181environment:ZOO_MY_ID: 1kafka:image: wurstmeister/kafkacontainer_name: kafkaports:- 9092:9092environment:KAFKA_ADVERTISED_HOST_NAME: 192.168.18.37KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181volumes:- /var/run/docker.sock:/var/run/docker.sockkafka_manager:image: sheepkiller/kafka-managercontainer_name: kafka_managerports:- 9000:9000environment:ZK_HOSTS: "zookeeper:2181"APPLICATION_SECRET: "random-secret"command: -Dpidfile.path=/dev/null消費(fèi)端代碼如下供參考,也可以用logstash直接拉取
package mainimport ("fmt""github.com/Shopify/sarama" )const TOPIC = "packetbeat" func main() {consumer, err := sarama.NewConsumer([]string{"127.0.0.1:9092"}, nil)if err != nil {fmt.Printf("fail to start consumer, err:%v\n", err)return}partitionList, err := consumer.Partitions(TOPIC) // 根據(jù)topic取到所有的分區(qū)if err != nil {fmt.Printf("fail to get list of partition:err%v\n", err)return}fmt.Println(partitionList)for partition := range partitionList { // 遍歷所有的分區(qū)// 針對每個(gè)分區(qū)創(chuàng)建一個(gè)對應(yīng)的分區(qū)消費(fèi)者pc, err := consumer.ConsumePartition(TOPIC, int32(partition), sarama.OffsetOldest)fmt.Printf("---%+v\n", pc)if err != nil {fmt.Printf("failed to start consumer for partition %d,err:%v\n", partition, err)return}defer pc.AsyncClose()// 異步從每個(gè)分區(qū)消費(fèi)信息i := 0for msg := range pc.Messages() {fmt.Printf("Partition:%d Offset:%d Key:%v Value:%v\n", msg.Partition, msg.Offset, string(msg.Key), string(msg.Value))i++if i > 5 {return}}} }logstash
安裝過程參考官網(wǎng)說明,配置
input {kafka {bootstrap_servers => "localhost:59471"topics => ["packetbeat"]} }output {elasticsearch {hosts => ["localhost:9200"]index => "packetbeat-7.8.1-2022.05.01-000001"document_type => "_doc"}stdout { codec => rubydebug } }ES集群+kibana
也是docker-compose安裝
services:elasticsearch01:build:context: elasticsearch/args:ELK_VERSION: ${ELK_VERSION:-7.8.1}volumes:- type: bindsource: ./elasticsearch/elasticsearch.ymltarget: /usr/share/elasticsearch/config/elasticsearch.ymlread_only: true- ./data_elasticsearch01:/usr/share/elasticsearch/dataports:- "9200:9200"environment:- node.name=elasticsearch01- discovery.seed_hosts=elasticsearch02- cluster.initial_master_nodes=elasticsearch01,elasticsearch02- bootstrap.memory_lock=true#- "ES_JAVA_OPTS=-Xms${ES_HEAP_SIZE:-2g} -Xmx${ES_HEAP_SIZE:-2g}"ulimits:memlock:soft: -1hard: -1elasticsearch02:build:context: elasticsearch/args:ELK_VERSION: ${ELK_VERSION:-7.8.1}volumes:- type: bindsource: ./elasticsearch/elasticsearch.ymltarget: /usr/share/elasticsearch/config/elasticsearch.ymlread_only: true- ./data_elasticsearch02:/usr/share/elasticsearch/dataenvironment:- node.name=elasticsearch02- discovery.seed_hosts=elasticsearch01- cluster.initial_master_nodes=elasticsearch01,elasticsearch02- bootstrap.memory_lock=true#- "ES_JAVA_OPTS=-Xms${ES_HEAP_SIZE:-2g} -Xmx${ES_HEAP_SIZE:-2g}"ulimits:memlock:soft: -1hard: -1kibana:build:context: kibana/args:ELK_VERSION: ${ELK_VERSION:-7.8.1}volumes:- type: bindsource: ./kibana/kibana.ymltarget: /usr/share/kibana/config/kibana.ymlread_only: trueports:- "5601:5601"environment:- elasticsearch.hosts=["http://elasticsearch01:9200"]總結(jié)
以上是生活随笔為你收集整理的救救家长:疫情封控下packetbeat+kafka+ES套件监控青少年上网行为的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JQuery样式
- 下一篇: STM32单片机的CRL和CRH寄存器