今天来讲述CI/CD的最後一个流程,Monitor。将App部署上机器後,我们仍然必须持续监控他的状态、流量、使用情形甚至是出错的情境。大多的时候,程序会将这些使用情形写成log档,如果你对Ubuntu系统比较熟悉,你一定知道要常常查看/var/log/
资料夹内的资料来帮助debug。
一旦系统变得过於大型,我们又该怎麽能方便的使用log档呢? ELK正是为了此需求而诞生,ELK由三项东西组成(其实应该说4项):
基本流程如下,Beats采集Log文件传送给Logstash,Logstash清理完成後交由Elastic保存起来,最後给予kibana呈现。
我之前写过关於ELK相关的安装与介绍,为了配合我们的主题:所有东西都要用container包住,今天会来讲解怎麽用docker-compose安装ELK。并且稍微讲一下Node.js的Log系统morgan做为范例。
Morgan常用於Node.js的Log保存,官方文件,写起来也很方便,如下是morgan应用在express上,详细程序参考:
var express = require('express')
var router = express.Router();
var fs = require('fs')
var morgan = require('morgan')
const DBconnect = require("../DBconnect");
var app = express()
// create a write stream (in append mode)
var accessLogStream = fs.createWriteStream(path.join(__dirname,'logs', 'access.log'), { flags: 'a' })
// setup the logger (common模式)
app.use(morgan('common', { stream: accessLogStream }))
// Get Fail on Purpose
router.get("/Fail",function(req,res){
res.status(404).send("Fail !!")
})
// Get Data
router.get('/company',function(req,res){
const sql = "SELECT * FROM COMPANY";
DBconnect.query(sql)
.then(data=>{
console.log(data)
res.send(data)
})
})
在morgan common模式下log会长的如下:
:remote-addr - :remote-user [:date[clf]] ":method :url HTTP/:http-version" :status :res[content-length]
输出如图:
接着我们来用Docker-compose建立ELK吧,这里使用docker-elk Github。
git clone https://github.com/deviantony/docker-elk.git
cd docker-elk && docker-compose up
等等继续写
<<: DAY27 MongoDB Time Series Collection
>>: Day11:Disconnect Chat(关闭连线频道)
昨日[Day 26]-【STM32系列】UART/USART TX 资料传送篇(上)我们体验了UAR...
可视化编程游戏引擎 可视化编程是指可以把程序代码视觉化 不需要写程序代码就可以编写程序逻辑,降低了...
前面的检视团购讯息,检视团购讯息用文字不好检视 这边计画用matplotlib的pyplot将资讯输...
StatefulWidget 的build 回到昨天 StatefulWidget 的 build ...
写 Android 会遇到的语言 Kotlin 用途: 这是写 Android 的主要语言,请务必熟...