日志监控系统

日志监控系统

目标与方案

搭建一个查询构建状态与日志的网站:

  1. 构建服务器向监控服务器传输状态与日志
  2. 监控服务器存储状态与日志
  3. 用户访问监控网站获取状态与日志
  4. 监控服务器通过后台服务获取存储的状态与日志

方案一:

Node.js + websocket + mongodb

通过websocket连接构建服务器与监控服务器、监控网站前后台,这样可以让日志与状态实时传输并且还可以在监控服务器传递数据到构建服务器,触发构建服务器的构建。

全局安装mongodb

# mac
brew tap mongodb/brew # 安装mongodb相关homebrew指令
brew install mongodb-community # 安装mongodb

brew services start mongodb-community #作为macOS服务运行mongodb
brew services stop mongodb-community@4.2 #作为macOS服务停止mongodb
mongod --config /usr/local/etc/mongod.conf --fork #作为后台进程手动运行mongodb

ps aux | grep -v grep | grep mongod #查看mongodb是否运行

方案二:

Node.js + Filebeat + Redis

Filebeat:

是开源的轻量级数据传送工具。包含两个主要组件,输入 Input 组件定时( scan_frequency 默认10s)查看配置中指定的文件大小,确定文件是否修改,如果修改就开启另一组件:收割机 Harvester ,收割机读取文件内容,获取到最新修改的文件( backoff 默认1s)输出到,直到关闭。

Filebeat官方教程

如果Filebeat要与mongodb结合使用,需要使用logstash并增加对应插件,不如使用redis数据库。

Redis:

Redis是开源的名值对形式的存储数据库,它的数据存储于内存中,性能优异,但占用内存。

需要设置密码才能进行远程设置

# redis server
CONFIG SET requirepass "mypass" #set password

# others cli
src/redis-cli -h www.someone.website -p 6379
AUTH mypass # input password

设置 maxmemory 限制redis占用大小

redis配置

redis-cli常用指令

keys * #获取所有keys
set key value #存储一个名值对
get key #根据key获取一个存储的值
expire key 120 #设置过期时间
ttl key #查看过期时间
set key value ex 120 #在设置值的时候设置过期时间
persist key #清除过期时间

lpush key value value #存储数组
rpush key value value #存储数组
lrange key 0 -1 #获取整个数组的值
llen key #获取数组长度

del key #删除值

步骤:

构建服务器:

  1. 构建服务器安装filebeat

    cd /opt
    sudo curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.8.0-linux-x86_64.tar.gz
    sudo tar xzvf filebeat-7.8.0-linux-x86_64.tar.gz
    sudo rm -rf filebeat-7.8.0-linux-x86_64.tar.gz
    sudo mv filebeat-7.8.0-linux-x86_64 filebeat
    
    
    sudo vim filebeat/filebeat.yml
    

    mac上使用brew指令启动filebeat时无效,但直接使用filebeat -e命令在控制台运行却没有问题

  2. 修改filebeat配置文件

    filebeat.inputs:
    - type: log
     enabled: true
      paths:
        - /xxx/*.log
    
    output.redis:
      hosts: ["localhost:6379"]
      password: "my_password"
      key: "filebeat"
      keys:
        - key: "filebeat-error"
          when.contains:
            message: "error"
      
     
    processors:
      - drop_fields:
          fields: ["agent", "ecs", "host", "input", "log", "cloud"]
    

    注意要注释默认的output与hosts

    drop_fields:删除原有属性

    decode_json_fields:转化json格式字段

  3. 运行filebeat

    cd /opt/filebeat
    sudo ./filebeat -e #控制台运行(debug)
    sudo ./filebeat & #后台运行
    
    ps aux | grep -v grep | grep filebeat #查看是否成功运行
    
    kill pid #关闭进程
    

监控服务器:

  1. 监控服务器安装redis

    cd /opt
    sudo wget http://download.redis.io/releases/redis-6.0.6.tar.gz
    sudo chown ec2-user redis-6.0.6.tar.gz
    sudo rm -rf redis-6.0.6.tar.gz
    sudo mv redis-6.0.6 redis
    sudo make
    
  2. 启动redis

    cd redis
    sudo ./src/redis-server &
    
    #查看是否成功运行
    sudo ./src/redis-cli
    
    
  3. 拉取监控网站服务器代码并运行

    #拉取代码略,从本地scp传输或直接git clone到监控服务器中
    
    cd /opt/monitor-build
    pm2 start src/server/app.js #启动node后台服务(端口为3002)
    

    如果更换端口或设置反向代理需要修改 /src/client/app.js 的baseURL

  4. 配置nginx,显示前端页面与反向代理node后台服务

    server {
            listen  8080  default;
            server_name  monitor-build;
    
            root /opt/monitor-build/src/client;
      
                 # 访问无需加.html后缀
            location / {
                if ($request_uri ~ ^/(.*)\.html$) {
                    return 302 /$1;
                }
                try_files $uri $uri.html $uri/ =404;
            }
      
            location /monitor-server/ {
               proxy_set_header X-Real-IP $remote_addr;
               proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
               proxy_set_header Host $http_host;
               proxy_set_header X-NginX-Proxy true;
               proxy_pass http://127.0.0.1:3002/;
               proxy_redirect off;
            }
        }
    
    

    反向代理注意根路径

其他

pm2设置log相关:

pm2清空log

pm2 flush

pm2-logrotate设置日志最大存储空间

pm2 install pm2-logrotate #安装pm2 log控制工具

linux后台运行服务

Filebeat不会监控最后一行

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,511评论 1 330
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,495评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,595评论 0 225
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,558评论 0 190
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,715评论 3 270
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,672评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,112评论 2 291
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,837评论 0 181
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,417评论 0 228
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,928评论 2 232
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,316评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,773评论 2 234
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,253评论 3 220
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,827评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,440评论 0 180
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,523评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,583评论 2 249