Skip to content

Latest commit

 

History

40 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Golang REST API + ELK 日誌系統

這是一個展示如何使用 Go 語言建立 RESTful API,整合 Microsoft SQL Server 資料庫以及 ELK Stack (Filebeat, Elasticsearch, Kibana) 進行集中式日誌管理的範例專案。

所有服務都透過 Docker Compose 管理,方便快速啟動環境。

系統架構

應用程式由以下服務組成:

  • api-service: 核心的 REST API,使用 Go 語言與 Gin 框架編寫,Log 處理採用具備高效能、支援結構化輸出的 zap 日誌框架。
  • mssql-db: Microsoft SQL Server 2022 資料庫。
  • filebeat: 一個輕量級的日誌收集器,收集日誌並轉發到 Elasticsearch。
  • elasticsearch: 一個搜尋與分析引擎,用於儲存和索引日誌,此專案用於接收 filebeat 傳過來的日誌內容。
  • kibana: 一個資料視覺化工具,用於查詢和檢視儲存在 Elasticsearch 中的日誌。

架構圖

依賴注入(Dependency Injection)

這個專案採用依賴注入設計,Service/Repository 皆於 main.go 統一建立並注入到 handler 及 middleware,讓程式碼更易於測試、維護與擴充。

// main.go
userRepo := repositories.NewUserRepository(db.Db)
userService := services.NewUserService(userRepo)
userHandler := handlers.NewUserHandler(userService)

server.POST("/CreateUser", userHandler.CreateUser)

組態設定

docker-compose.yml定義所有服務的啟動方式、相依性、資料卷。

環境變數

  • api-service:
    • DemoDb: 連接到 MS SQL 資料庫的連線字串。
  • mssql-db:
    • SA_PASSWORD: SA 使用者的密碼。

資料庫初始化

mssql-db 服務首次啟動時,會自動執行 initDb/init.sql 指令碼,這裡會執行建立資料表 (CREATE TABLE) 的 SQL 命令。

日誌收集

日誌收集的設定位於 filebeat/filebeat.yml,filebeat 會監控 log-data 磁碟區中的日誌檔案,該磁碟區與 api-service 共享。

環境需求

  • Docker
  • Docker Compose (通常會跟 Docker 一起安裝)

快速開始

1. 啟動所有服務

docker-compose up --build

2. 服務說明

服務啟動後,您可以透過以下位址存取:

  • API 服務: http://localhost:8080
  • Swagger 文件: http://localhost:8080/swagger/index.html
  • elasticsearch: http://localhost:9200
  • Kibana (日誌儀表板): http://localhost:5601
    • 開啟後,點擊左側選單的 "Discover",您應該能看到由 api-service 產生的日誌。
    • 點選左側選單的 "Stack Management" > "Index Management",勾選 "Include hidden indices" 即可看到 .ds-filebeat-datastream-9.0.3-*,不用自己手動 Create Index
  • 資料庫連線:
    • 工具: SQL Server Management Studio
    • 主機: localhost
    • Port: 1433
    • 使用者: SA
    • 密碼: StrongPassword!123

目錄結構

├── api-service/                # Golang API 主程式
│   ├── customerrors/           # 自定義錯誤型別
│   ├── db/                     # 資料庫連線與操作
│   ├── docs/                   # Swagger 自動產生的 API 文檔
│   ├── handlers/               # HTTP handler
│   ├── logger/                 # 日誌工具
│   ├── middlewares/            # Gin 中介層(權限驗證、日誌、錯誤處理)
│   ├── models/                 # 資料模型
│   ├── repositories/           # 資料存取層
│   ├── routes/                 # API 路由註冊
│   ├── services/               # 商業邏輯層
│   ├── utils/                  # 工具函式
│   ├── Dockerfile              # Docker 構建檔案
│   ├── go.mod                  # Go module 設定
│   ├── go.sum                  # Go module 依賴雜湊
│   └── main.go                 # 進入點
├── filebeat/
│   └── filebeat.yml            # Filebeat 設定檔
├── images/                     # 說明文件用的圖檔
├── initDb/
│   └── init.sql                # SQL Server 初始化腳本
├── docker-compose.yml          # Docker Compose 配置
└── README.md                   # 專案說明文件

About

A sample project demonstrating how to build a RESTful API using Go, integrated with MS SQL and the ELK Stack (Filebeat, Elasticsearch, Kibana) for centralized log management.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages