# 目錄
* [開放原始碼日誌集中平台 - Graylog安裝(一)](https://hackmd.io/@-RUDICxLQWeepKhTffJeBQ/rJQ4r_gjp)
* [開放原始碼日誌集中平台 - Graylog Sidecar 安裝/介紹(二)](https://hackmd.io/@-RUDICxLQWeepKhTffJeBQ/Hybfp1pia)
# Graylog介紹
Graylog是一個開源的事件紀錄分析系統,它的主要功能包括:
1. Web操作介面:提供一個可視化的網頁介面,方便使用者操作和管理
2. 收集多種格式與主機記錄:來自多台不同設備機器的Log檔彙整一處集中管理分析
3. 支援叢集運作機制:可以在多個Graylog節點前增加負載平衡,除了能夠分流大量的Log紀錄外,更能檢查節點是否正常,將連線異常的節點去除
4. 資料內容即時剖析:可以即時分析收到的Log紀錄,並提供各種搜尋語法與分析功能
5. 自訂欄位解析方式:提供多種方式讓使用者自己增加Extractor,例如JSON、Regular expression、Substring等
6. 自訂資訊看板內容:將重要的關鍵資訊找出,並將這些常用的結果數據集中在資訊看板上,以便日後快速查看趨勢或問題所在
7. 警報發送機制:特別注意的事件以相關系統發出警報,或是丟進SOC或SIEM等的資安機制進行反應
## 心智圖

# Graylog 架構
* Graylog :接收、處理和顯示日誌數據
* Elasticsearch :存儲Graylog處理的日誌數據
* MongoDB :存儲Graylog配置數據和資訊

[圖片來自如 Graylog官網]
## Graylog叢集
Graylog 提供了叢集環境,可以在多個 Graylog 節點之間實現負載平衡,並檢查節點是否正常,確認系統是否穩定運作

[圖片來自如 Graylog官網]
# Garylog 安裝
### **環境介紹**
作業系統
ubuntu 22.04
**環境準備**
更新系統
```
sudo apt-get update && sudo apt-get upgrade
```
更改時間為台灣
```
timedatectl set-timezone Asia/Taipei
```
安裝Java11
```
sudo apt-get install apt-transport-https openjdk-11-jre-headless uuid-runtime pwgen
```
## 安裝 MongoDB
注意Ubuntu 版本
* 22.04 LTS ("Jammy")
* 20.04 LTS ("Focal")
MongoDB 僅支援這些平台的 64 位元版本。若要確定您的主機正在執行哪個 Ubuntu 版本,請在主機的終端機上執行下列命令:
```
cat /etc/lsb-release
```

MongoDB 系統使用的公鑰
```
sudo apt-get install gnupg curl
```
MongoDB 公用 GPG 金鑰
`curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | \
sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg \
--dearmor`
MongoDB 建立列表文件
```
/etc/apt/sources.list.d/mongodb-org-7.0.list
```
建立檔案
```
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
```
重新載入本機套件資料庫
```
sudo apt-get update
```
可以指定 MongoDB 的任何可用版本, apt-get但當有新版本可用時將升級套件。為了防止意外升級,您可以將軟體包固定在目前安裝的版本上
```
echo "mongodb-org hold" | sudo dpkg --set-selections
echo "mongodb-org-database hold" | sudo dpkg --set-selections
echo "mongodb-org-server hold" | sudo dpkg --set-selections
echo "mongodb-mongosh hold" | sudo dpkg --set-selections
echo "mongodb-org-mongos hold" | sudo dpkg --set-selections
echo "mongodb-org-tools hold" | sudo dpkg --set-selections
```
初始化系統
如果您不確定您的平台使用哪個 init 系統,請執行以下命令:
```
ps --no-headers -o comm 1
```
然後根據結果選擇下面適當的選項卡:
* systemd- 選擇下方的systemd (systemctl)標籤。
* init- 選擇下面的System V Init(服務)標籤。
**本文章使用systemd安裝**
啟動 MongoDB
```
sudo systemctl start mongod
sudo systemctl enable mongod
```
驗證 MongoDB 是否已成功啟動
```
sudo systemctl status mongod
```

## 安裝 Elasticsearch
Elasticsearch 是一個開源的分佈式搜尋和分析引擎,用於全文檢索、結構化搜尋和分析,建立在 Apache Lucene 搜尋引擎的基礎上,提供了一個快速、即時的搜索和分析解決方案
```
# GPG 金鑰
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
# Elasticsearch 存儲庫
echo "deb [signed-by=/usr/share/keyrings/elasticsearch-archive-keyring.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list > /dev/null
# 更新 APT 存儲庫
sudo apt-get update
# 安裝 Elasticsearch
sudo apt-get install -y elasticsearch
# 啟動 Elasticsearch 服務
sudo systemctl start elasticsearch
# 設置 Elasticsearch 開機啟動
sudo systemctl enable elasticsearch
# 設置 Elasticsearch 查看服務
sudo systemctl status elasticsearch
```

Elasticsearch 7.x 目前需要 Java 11,Java版本過舊會導致無法正常使用,可以使用以下命令檢查 Java 版本
```
java -version
```
## 安裝 Graylog
```
# 安裝軟體包
sudo apt-get update
sudo apt-get install -y apt-transport-https openjdk-11-jre-headless uuid-runtime pwgen
# Graylog 存儲庫
sudo sh -c 'echo "deb [ arch=amd64 ] https://packages.graylog2.org/repo/debian/ stable 5.2" > /etc/apt/sources.list.d/graylog.list'
# Graylog GPG 金鑰
wget https://packages.graylog2.org/repo/packages/graylog-5.2-repository_latest.deb
sudo dpkg -i graylog-5.2-repository_latest.deb
# 更新 APT 存儲庫信息
sudo apt-get update
# 安裝 Graylog
sudo apt-get install -y graylog-server
# 啟動 Graylog 服務
sudo systemctl daemon-reload
sudo systemctl enable graylog-server
sudo systemctl start graylog-server
```
**注意** 目前階段看到Graylog 無法啟動是因為密碼(passwd)為空值
### Garylog Web設定
1. 打開 Graylog 配置文件 /etc/graylog/server/server.conf 進行編輯:
```
sudo vim /etc/graylog/server/server.conf
```
2. **server.conf** 尋找 http_bind_address 參數,默認情況下,它可能被設置為 **http_bind_address = 127.0.0.1:9000**,將其修改為您伺服器的外部 IP 地址或 **0.0.0.0:9000**
```
http_bind_address = 0.0.0.0:9000
```

3. 更改時區UTC改為Asia/Taipei
```
root_timezone =Asia/Taipei
```

4. 保存文件
5. 重新啟動 Graylog 服務以應用更改:
```
sudo systemctl restart graylog-server
sudo systemctl status graylog-server
```
使用 **systemctl status graylog-serve**會看到發現錯誤,查看Graylog的日誌獲取錯誤信息
```
sudo vim /etc/graylog/server/server.conf
```

以下圖片log錯誤 原因是:
password_secret 此參數被設置為一個非空的字符串,下面文章會介紹該如何新增和修改password_secret

5. Graylog 應該在外部 IP 地址的 9000 端口上聽取連接,可以使用 **netstat** 命令確認服務正在監聽所需的 IP 和端口
```
sudo netstat -tulpn | grep 9000
```
### Garylog密碼設置
因密碼是空值,導致無法正常運作Garylog,需要將password_secret 參數值添加到 Graylog 配置server.conf文件中
1. 生成一個安全的密碼,把他紀錄起來
```
pwgen -N 1 -s 96
```
2. 生產sha256_hash值,把他紀錄起來
```
echo -n "Enter Password: " && head -1 </dev/stdin | tr -d '\n' | sha256sum | cut -d" " -f1
```

3. 在 /etc/graylog/server/server.conf 中,找到 password_secret 和root_password_sha2,將其設置為生成的安全密碼
<aside>
💡
不能將 root_password_sha2 和 password_secret 貼錯,這可能導致後續無法正確登入 Graylog
</aside>
```
sudo vim /etc/graylog/server/server.conf
```

4. 保存文件
5. 重新啟動 Graylog 服務
```
sudo systemctl restart graylog-server
sudo systemctl status graylog-server
```

使用瀏覽器開啟「000.000.000.000:9000」(請代換為您的IP),帳號/密碼預設為**admin**

**恭喜!您現在已經成功實現登入後顯示功能
在下一篇文章中,我們將深入介紹 GaryLog 的更多功能和用
敬請期待!**
# 參考文件
* [MongoDB Ubuntu 安裝 ](https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-ubuntu/)
* [Garylog官網](https://graylog.org/)
* [Garylog-Planning Your Deployment](https://go2docs.graylog.org/5-2/planning_your_deployment/planning_your_deployment.html?tocpath=Planning%20Your%20Deployment%7C_____0)
****