Go 實現 nginx log 讀取 分析 寫入InfluxDB 並用Grafana 顯示
參考:慕課網https://www.imooc.com/learn/982
1. 系統結構
用Go實現檔案讀取,並且將log 分析並寫入InfluxDB,最後用通過配置Grafana 顯示
log file –>log process –> influxdb –> grafana
監控需求:某個協議下的某個請求在某個請求方法的QPS和響應時間和流量
2. Go 接收
- Go 併發執行
- 將複雜的任務拆分,通過goroutine去併發的執行
- 通過channel做資料通訊
- Golang 中物件導向
- struct物件
- interface
- 封裝,繼承,多型
封裝:
type Foo struct {
baz string
}
func (f * Foo) echo() {
fmt.Println(f.baz)
}
繼承:
type Foo struct {
baz string
}
type Bar strct {
Foo
}
Code 實現:https://github.com/itsmikej/imooc_logprocess, 通過看視訊教程,應該可以能夠很好的理解code, 以及理解如何一步步實現模組封裝。
3. InfluxDB
是一個開源的時序性的資料庫,使用GO編寫,被廣泛用於儲存系統的監控資料,IOT行業的實時資料等場景,有以下特性:
- 部署簡單,無外部依賴
- 內建http支援,使用http讀寫
- 類sql的靈活查詢(max,min,sum等)
概念:database: 資料庫;measurement: 資料庫的表,points: 表裡的一行資料(tags: 有索引的屬性,fields:各種記錄的值,time: 時間戳)
寫入資料:
curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'cpu_usage,host=server01,region=us-west value=0.64 143405230000000'
讀取資料:
curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=mydb" --data-urlencode "q=SELECT\"value\"FROM\"cpu_usage\"WHERE "region\"='us-west'"
針對本log 系統:
tags: path, method, scheme, status
Fileds: UpstreamTime, Requestime,BytesSent
Time: Timelocal
安裝:
- docker pull influxdb
- 建立DB,
curl -G http://localhost:8086/query --data-urlencode "q=CREATE DATABASE imooc"
- 建立使用者,
curl "http://localhost:8086/query" --data-urlencode "q=CREATE USER imooc WITH PASSWORD 'imoocpass' WITH ALL PRIVILEGES"
- 啟動container:
docker run -itd -p 8086:8086 -v $PWD:/var/lib/influxd influxdb
4. Grafana
Grafana 可以整合多種資料來源, ES, Mysql 等 可以通過建立漂亮的GUI,實時的顯示資料。只需要配置下Datastore,以及DashBoad
安裝
docker run -d --name=grafana -p 3000:3000 grafana/grafana
Add datastore: 新增 influxdb 的地址,資料庫等資訊。
相關文章
- Docker 快速實現 【JMeter + InfluxDB + Grafana】 監控方案DockerJMeterUXGrafana
- Flink 1.9 實戰:使用 SQL 讀取 Kafka 並寫入 MySQLKafkaMySql
- locust+influxdb+grafana 實現自定義測試報告UXGrafana測試報告
- 讀取檔案流並寫入檔案流
- JMeter+InfluxDB+GrafanaJMeterUXGrafana
- 【GO】Elasticsearch的簡單寫入和讀取示例GoElasticsearch
- iOS自定義log並寫入檔案iOS
- QLabel顯示圖片 ,並實現縮放
- Jmeter+Influxdb+Grafana搭建JMeterUXGrafana
- 02-使用BIOS中斷 顯示字元/讀取磁碟 【實現boot中載入loader的功能】iOS字元boot
- DS18B20讀取溫度並顯示在數碼管上
- kubernetes實踐之十:Kubernetes-dashboard+Heapster+InfluxDB+GrafanaUXGrafana
- k8s實踐(十一):heapster+influxdb+grafanaK8SUXGrafana
- [docker][influxdb][grafana][jmeter] 配置 jmeter 資料至 grafana 展示DockerUXGrafanaJMeter
- OS實驗八:採用快取記憶體實現檔案讀寫快取記憶體
- 關於利用go實現非同步讀寫的寫法分享Go非同步
- JavaScript 寫入與讀取cookieJavaScriptCookie
- 用 logstash 從 kafka 讀取資料寫入 Elasticsearch(qbit)KafkaElasticsearch
- java讀取excel為物件並進行讀寫操作JavaExcel物件
- Django實現圖片上傳並前端頁面顯示Django前端
- Nginx實現URL重寫Nginx
- nginx實用入門Nginx
- 妙招:使用Python實現圖片在人臉識別並顯示Python
- jsoncpp按寫入順序讀取JSON
- Flink 實踐教程-入門(6):讀取 PG 資料寫入 ClickHouse
- 如何用NodeJS讀取分析Nginx錯誤日誌NodeJSNginx
- Angular 實現輸入框中顯示文章標籤Angular
- MATLAB學習之gif圖片讀取顯示Matlab
- Maui 讀取外部檔案顯示到Blazor中UIBlazor
- Go interface實現分析Go
- 用 ABAP 新建本地 Excel 檔案並寫入資料試讀版Excel
- Geoserver + MySQL實現圖層顯示和文字顯示ServerMySql
- 12C開始oracle實現了SCALABLE LGWR多程式並行寫redo logOracle並行
- 從零手寫實現 nginx-03-nginx 基於 Netty 實現NginxNetty
- Flink 實踐教程 - 入門(4):讀取 MySQL 資料寫入到 ESMySql
- 搭建jmeter+influxdb+grafana壓測實時監控平臺(超詳細,小白適用)JMeterUXGrafana
- 使用cAdvisor+Influxdb+Grafana監控系統UXGrafana
- jmeter+influxdb+grafana監控平臺搭建JMeterUXGrafana