Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/letran3691/graylog
Quản lý log tập trung và gửi mail cảnh khi có ghi nhận lỗi theo cấu hình
https://github.com/letran3691/graylog
Last synced: about 2 months ago
JSON representation
Quản lý log tập trung và gửi mail cảnh khi có ghi nhận lỗi theo cấu hình
- Host: GitHub
- URL: https://github.com/letran3691/graylog
- Owner: letran3691
- Created: 2019-03-30T16:06:40.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2019-09-04T04:22:20.000Z (over 5 years ago)
- Last Synced: 2023-12-25T04:29:19.968Z (about 1 year ago)
- Homepage:
- Size: 10.7 KB
- Stars: 5
- Watchers: 2
- Forks: 7
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
## Mục lục
------
#### [1 Giới thiệu](#1)
- [1.1 Thành Phần](#1.1)
#### [2 Cài Đặt Centos7](#2)- [2.1 Cài đặt packet](#2.1)
- [2.2 Cài Elasticsrach](#2.2)
- [2.3 Cài đặt Mongodb](#2.3)
- [2.4 Cài đặt Graylog](#2.4)
- [2.5 Cầu hình web interface](#2.5)
- [2.6 Cầu hình Rsyslog](#2.6)
- [2.7 Web GUI](#2.7)
- [2.8 Alert Mail](#2.8)
#### [3 Tham khảo](#3)
- [3.1 Liên hệ](#3.1)
-------------------
- Graylog là một nền tảng quản lí log mã nguồn mở với nhiều tính năng mạnh mẽ. Nó có khả năng gộp chung và giải nén các dữ liệu quan trọng từ server log, thứ thường được gửi sử dụng giao thức Syslog. Bên cạnh đó Graylog cũng hỗ trợ việc tìm kiếm và giúp bạn hình dung cấu trúc của log thông qua một giao diện web.
- Bài viết này sẽ hướng dẫn bạn cài đặt và cấu hình Graylog trên server **Centos7**, đồng thời thiết lập một đầu vào đơn giản dùng để ghi system log.
- **MongoDB**: Lưu trữ các cấu hình và thông tin meta
- **Elasticsearch**: Lữu trữ log và cung cấp dữ liệu tìm kiếm, phần chiếm nhiều tài nguyên các các hành động phần lớn sẽ được thự hiện tại đây.
- **GrayLog**: Phân tích cú pháp log và thu thập log từ các client gửi lên.
- **GrayLog Web interface**: Quản lý bằng giao diện web
### 2 Cài đặt- Tắt vào firewalld
systemctl stop firewalld
systemctl disable firewalld
sudo setenforce 0
reboot
yum -y install epel-release
- Install java
- Elasticsearch dựa trên nên java nên cần cài đặt JDK
yum install java
![image](https://user-images.githubusercontent.com/19284401/55300780-6e44aa00-5463-11e9-97bd-2f4ca91521ec.png)
### 2.2 Cài đặt Elasticsearch- Import the GPG key
rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
- Tạo repo mới cho **Elasticseach**
vi /etc/yum.repos.d/elasticsearch.repo
- Pates nội dung sau vào file
[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=https://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
- Hiện tại **Elasticseach** phiên bản mới nhất là 6.7.
- Tuy nhiên ở đây mình dùng bản 2.x, cụ thể hơn là 2.4. Vì đơn giản là bản 6.7 nó ngốn quá nhiều tài nguyện luôn.
![image](https://user-images.githubusercontent.com/19284401/55300976-7ea95480-5464-11e9-8316-75fe7bafa291.png)
- Với cấu hình như trên mình chạy bản 5.x mà được vài phút là **Elasticseach** lăn ra chết vì ko đủ RAM. nhưng với bản 2.4 thì chạy gần 1 năm nay ko bị sao cả.
- Cài đặt elasticsearchyum -y install elasticsearch
- Cấu hình elasticsearch
systemctl daemon-reload
systemctl enable elasticsearch.service
- Cấu hình elasticsearchvi /etc/elasticsearch/elasticsearch.yml
- Tìm đến dòng 17 sửa thành **graylog**
![image](https://user-images.githubusercontent.com/19284401/55301366-7a7e3680-5466-11e9-8628-becbb3463901.png)
- Restart elasticsearch
systemctl restart elasticsearch.service
- Check lại thông tin elasticsearch
curl -X GET http://localhost:9200
![image](https://user-images.githubusercontent.com/19284401/55301675-edd47800-5467-11e9-900d-a4a10c75afd5.png)
- Kiểm tra tình trạng "sức khỏe" của elasticsearch
curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'
- Nếu bạn thấy dòng **"status" : "green"** là ngon rồi.
![image](https://user-images.githubusercontent.com/19284401/55301816-9c78b880-5468-11e9-80ac-2fc39db144c8.png)
### 2.3 Cài đặt Mongodb- Creat repo
vi /etc/yum.repos.d/mongodb-org-3.6.repo
- Pates nội dung sau vào file
[mongodb-org-3.0]
name=MongoDB Repository
baseurl=http://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.0/x86_64/
gpgcheck=0
enabled=1
- Cài đặt Mongodbyum -y install mongodb-org
- Nếu firewalldđang bậtyum -y install policycoreutils-python
semanage port -a -t mongod_port_t -p tcp 27017
- Nếu bạn ko muốn dùng firewalld
systemctl stop firewalld
systemctl disable firewalld
- Start và enable Mongodbsystemctl start mongod
systemctl enable mongod
### 2.4 Cài đặt Graylog- Tạo repo
vi /etc/yum.repos.d/graylog.repo- Pates nội dung sau vào file.
[graylog]
name=graylog
baseurl=https://packages.graylog2.org/repo/el/stable/2.4/$basearch/
gpgcheck=1
repo_gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-graylog
- Cài đặtyum -y install graylog-server
- Cấu hìnhvi /etc/graylog/server/server.conf
- Tìm đến dòng 55 Thêm bất kì những ký tự nào đó trên bàn phím vào sau dâu = cũng được (có có ký tự đặc biệt)VD: password_secret =fahiogbfaerogiboierahgowebgaw0eoigbwguoptgbobofrbwepiufbgierubgfwuipfbw
![image](https://user-images.githubusercontent.com/19284401/64225523-f0029d00-cf05-11e9-8a3a-39ae10d1a40d.png)
- Nếu bạn muộn thể hiện sự chuyên nghiệp thì bạn dùng lệnh sau để gen ra 1 chuỗi ngẫu nhiên rồi pates sau dấu =yum -y install pwgen
pwgen -N 1 -s 96
- Tìm tiếp đến dòng 66 thay đoạn code vào sau dâu =echo -n yourpassword | sha256sum
- Thay **yourpassword** bằng password của bạn
![image](https://user-images.githubusercontent.com/19284401/55302715-a00e3e80-546c-11e9-9f63-995825d93268.png)
- Chú ý bỏ cài dấu - ở cuối dùng đi nhé
![image](https://user-images.githubusercontent.com/19284401/55302734-b9af8600-546c-11e9-977a-9668ea12ac5b.png)
### 2.5 Cấu hình Graylog web interface
vi /etc/graylog/server/server.conf
- Tìm đến dòng 81 và 132 vào sửa lại ip cho hợp lý.
![image](https://user-images.githubusercontent.com/19284401/55303068-56beee80-546e-11e9-9e2c-4f88dd60b1a3.png)
![image](https://user-images.githubusercontent.com/19284401/55303124-92f24f00-546e-11e9-8121-2039203481b9.png)
- Restart và enable graylog-server
systemctl daemon-reload
systemctl restart graylog-server
systemctl enable graylog-server- Graylog hỗ trợ khá nhiều cách để có thể nhận được log từ client gửi lên. Tuy nhiên mình sẽ hướng dẫn mọi người các đơn giản nhất đó là dùng **rsyslog**
- Install rsyslog
yum install rsyslog
- Cấu hình.
vi /etc/rsyslog.conf
- Để có thể gửi log lên server bạn cần chỉnh sửa lại file
- Thêm đoạn code này vào file
$ModLoad imfile
- Cú pháp gửi log lên server
$InputFileName /var/log/httpd/xxxx_access.log
$InputFileTag xxxAccessLog:
$InputFileStateFile xxxx_acc.log.statefile
$InputFileFacility local3
$InputFileSeverity info
$InputRunFileMonitor
- InputFileName: Đường dẫn đến file log
- InputFileTag: Thẻ tab (đặt tên gì cũng được cốt là để dễ nhớ)
- InputFileFacility
### Tham khảo thêm về $ModLoad imfile tại đây
### Tham khảo về Facility và Severity level tại đây
- Trỏ về server log
local3.* @10.0.1.129:9999
- **local3** là Facility ở trên
- @10.0.1.129: là ip của server graylog
- 9999: là port của graylog
- Chú ý: Nếu firewalld đang mở nhớ mở port nhé- Enable và start rsyslog
systemctl enable rsyslog && systemctl restart rsyslog
#### 2.7 Web GUI- Truy cập
http://your_ip_server:9000
![image](https://user-images.githubusercontent.com/19284401/55304682-d486f800-5476-11e9-963c-1c54c967c277.png)
- user mặc định là **admin**
- pass bạn đã tạo ở bước trước "echo -n **yourpassword** | sha256sum "
- Đăng nhập xong bạn vào tab **SEARCH**![image](https://user-images.githubusercontent.com/19284401/55304827-94744500-5477-11e9-97a7-269180ffbbc3.png)
- Đây là nơi hiển thị toàn bộ log mà server thư thập được từ client gửi lên.
- Tab **Stream**
![image](https://user-images.githubusercontent.com/19284401/55315062-af55b200-5495-11e9-8972-71a5610b9910.png)
- Đây là nơi các bạn phân loại logs(access, error, warning...) để dễ quản lý.
- Tạo Stream mới, góc trên bên phải.
![image](https://user-images.githubusercontent.com/19284401/55315199-06f41d80-5496-11e9-8716-c67b9f82de58.png)
- Tạo Rules cho Stream.
- Nhìn lại tab Search 1 chút các bạn sẽ thấy nhưng thông tin này ở đó.
![image](https://user-images.githubusercontent.com/19284401/55315973-a534b300-5497-11e9-89c3-60c44e5b778a.png)
- Phần Field và phần value sẽ là điều kiện để ghi nhận log vào stream
![image](https://user-images.githubusercontent.com/19284401/55315738-25a6e400-5497-11e9-95b2-3287f0d3ff07.png)
- Như trong VD dưới đây Field mình chọn message và Value mình chọn WowzaError
![image](https://user-images.githubusercontent.com/19284401/55375179-71a86600-5535-11e9-921b-ca1f46d97e36.png)
- Tức là khi có log gửi lênh. Graylog sẽ check điều kiện để gắn message này vào stream nào
![image](https://user-images.githubusercontent.com/19284401/55375329-f1363500-5535-11e9-9bf7-4508ca385bdf.png)
- Như Các bạn thấy trong Stream này mình có 2 điều kiện
- 1 Field facility must match regular expression local4
- 2 Field message must match regular expression WowzaError
- Nếu đủ 2 điều kiện này thì sẽ cho log này vào stream.
![image](https://user-images.githubusercontent.com/19284401/55375463-70c40400-5536-11e9-9c2b-31b8d5d1d1fd.png)
![image](https://user-images.githubusercontent.com/19284401/55315491-9ef20700-5496-11e9-9849-86bc3a6d2199.png)
![image](https://user-images.githubusercontent.com/19284401/55315616-de205800-5496-11e9-9789-893dd4bd5c2f.png)
- Tab Alert này sẽ liên quan để phần cấu hình mail, mình sẽ nói cuối cùng
![image](https://user-images.githubusercontent.com/19284401/55316387-7b2fc080-5498-11e9-9b07-2be078ab899d.png)
- Tab System -> input
![image](https://user-images.githubusercontent.com/19284401/55341914-be5a5580-54d1-11e9-86d6-caf9a2fe9ecb.png)- Tab này là nơi cấu hình để client gửi log lên.
![image](https://user-images.githubusercontent.com/19284401/55342004-f6619880-54d1-11e9-80e6-716b7d86104e.png)
- Bạn chọn **Raw/plantext UDP** hoặc **syslog UDP** rồi **LAUNCH NEW INPUT** ngay bên cạnh
- Điểm khác này của 2 cái này là gì.
- Syslog UDP: đơn giản là gửi theo cấu trúc của Rsyslog thôi.
- Raw/plantext UDP: Cài này các bạn chú ý này. nếu **client và graylog ko cùng timelocal**, thì các bạn phải dùng option này thì mới xem được log, nếu ko chọn cái này thì graylog vẫn ghi nhận có log nhưng nó ko hiện thị ra được vì giờ giữa client và nó ko đồng bộ được.
##### Syslog UDP
![image](https://user-images.githubusercontent.com/19284401/55342912-1a25de00-54d4-11e9-921b-dd5646f3c94d.png)
- Global: nếu bạn có nhiều client gửi log lên server bằng cơ chế Rsyslog.
- Title: Đặt tên thôi.
- Bin Address: Các bạn để 0.0.0.0 là cho phép tất cả các client gửi log lên.
- port: client sẽ gửi log qua port này. đã nói ở phần cấu hình **Rsyslog**
- Store Full Message: lưu lại toàn bộ log ở dạng full message mà ko xóa.
##### Raw/plantext UDP:
![image](https://user-images.githubusercontent.com/19284401/55342975-3c1f6080-54d4-11e9-9238-87883a3c25bf.png)- Khá giống với **Syslog UDP**
- Nếu đơn giản chỉ là quản lý log tập trung thì có rất nhiều các tool khác, chả cần phải phục tạp thế này. Nhưng cái hay cảu Graylog là nó tích hợp sẵn mail cho người dùng, chỉ cần cấu hình là xong.
##### 2.8 Cấu hình Alert mail- Cấu hình lại file config
vi /etc/graylog/server/server.conf
- Tìm đến dòng 497 **# Email transport** Đây là phần cấu hình liên quan đến gửi mail497 #Email transport
498 #transport_email_enabled = false
499 #transport_email_hostname = mail.example.com
500 #transport_email_port = 587
501 #transport_email_use_auth = true
502 #transport_email_use_tls = true
503 #transport_email_use_ssl = true
504 #transport_email_auth_username = [email protected]
505 #transport_email_auth_password = secret
506 #transport_email_subject_prefix = [graylog]
507 #transport_email_from_email = [email protected]
- transport_email_enabled: cho phép gửi mail
- transport_email_hostname: server mail
- transport_email_port: port
- transport_email_use_auth = true
- transport_email_use_tls = true
- transport_email_use_ssl = true bật xác thực- transport_email_auth_username: địa chỉ mail
- transport_email_auth_password: password mail
- transport_email_from_email: nhập lại địa chỉ mail.
- transport_email_web_interface_url: nhập ip (ip public) và port của server (nếu các bạn public graylog ra ngoài thì phải có dòng này nhé).
![image](https://user-images.githubusercontent.com/19284401/55372033-6bf95300-552a-11e9-8a81-fceeaae083ab.png)Tham khảo thêm tại đây.
- Restart lại graylog
systemctl daemon-reload
systemctl restart graylog-server- Các bạn ko nên chỉnh sửa trực tiếp vào mẫu, mà nên copy ra để sửa tránh trường hợp cấu hình sai, lại ko biết sửa lại thể nào.
- Chú ý: ko nếu dùng Gmail hoặc Gsuite phần cho phép tài khoản đăng nhập từ ứng dụng kém an toàn tại đây
- Quay lại giao diện web
- Alert -> Manage conditions
![image](https://user-images.githubusercontent.com/19284401/55372795-238f6480-552d-11e9-9a0a-a216279e3612.png)
- Add New Conditions **Alert on stream** và **Condition Type** -> Add Alert Condition
![image](https://user-images.githubusercontent.com/19284401/55372872-60f3f200-552d-11e9-98e8-ff8137f8b4d8.png)
![image](https://user-images.githubusercontent.com/19284401/55372906-8254de00-552d-11e9-980c-ac618640cab3.png)
- Alert on stream: ở đây sẽ list ra toàn bộ các stream mà bạn đã tạo. bạn muốn nhận mail thông báo khi stream nào thì bạn chọn stream đó.
- Condition Type: Điểu kiện để gửi mail
- Alert -> Manage notification -> Add new notification
![image](https://user-images.githubusercontent.com/19284401/55373405-31de8000-552f-11e9-8c87-8863088b1889.png)
![image](https://user-images.githubusercontent.com/19284401/55373445-563a5c80-552f-11e9-9eeb-bbf5a6760986.png)- Mục Notification -> Add Alert notification
![image](https://user-images.githubusercontent.com/19284401/55373600-e5e00b00-552f-11e9-982b-2825d352bdcf.png)
- notifi on stream: các bạn chọn đúng cái stream mà các bạn đã chọn ở mục **Add Alert Condition**
- Notification Type: các bạn chọn kiểu Email Alert Callback để gọi đến hàm gửi mail
- sau khi **Add Alert notification** bạn sẽ có 1 popup như hình dưới
![image](https://user-images.githubusercontent.com/19284401/55373865-bb428200-5530-11e9-9c3b-206e561585f6.png)
- Title: Đặt tên cho notifications
- Sender: Nhập địa chỉ email đã cấu hình trong file config ở trên (transport_email_auth_username = [email protected])
- Email receivers: nhập email nhập mail thông báo (nhập xong 1 email các bạn tab 1 cái để nhập emmail tiếp theo).
![image](https://user-images.githubusercontent.com/19284401/55374207-cfd34a00-5531-11e9-9eac-bbe631169a53.png)Cuối cùng là **Save**
- Giờ chúng ta cùng test alert mail.![image](https://user-images.githubusercontent.com/19284401/55374771-e4b0dd00-5533-11e9-8732-dbd1c371d01a.png)
- Mình echo 1 chuỗi vào file log để server ghi nhận.
- Kiểm tra lại trong phần Stream xem đã ghi nhận log chưa.
![image](https://user-images.githubusercontent.com/19284401/55374893-58eb8080-5534-11e9-861c-24220178a8e9.png)
- Giờ ngồi đợi mail.
![image](https://user-images.githubusercontent.com/19284401/55375055-ddd69a00-5534-11e9-9417-45bd1837b45e.png)
- Sau khoảng 1 phút thì đã nhận được mail của graylog rồi. Xử lý cũng khá nhanh.
Như vậy mình đã hướng dẫn xong Graylog server. Chúc các bạn thành công.1. Cài đặt Graylog http://docs.graylog.org/en/3.0/pages/installation/os/centos.html
2. Cài đặt Mongodb https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/
3. Cài đặt Elasticsearch https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-elasticsearch-on-centos-7
4. Cài đặt Graylog server https://www.vultr.com/docs/how-to-install-graylog-server-on-centos-7
#### 3.1 Liên hệ.