下載 elk
下載地址
elasticsearch地址: https://www.elastic.co/cn/downloads/elasticsearch
kibana地址: https://www.elastic.co/cn/downloads/kibana
logstash地址: https://www.elastic.co/cn/downloads/logstash
解壓elk
創建es全家桶文件夾
cd /usr/local
mkdir elk
cd elk
將下載文件放入elk中,也可以通過wget+下載地址直接下載
tar -zxvf logstash-9.1.2-linux-x86_64.tar.gztar -zxvf kibana-9.1.2-linux-x86_64.tar.gztar -zxvf elasticsearch-9.1.2-linux-x86_64.tar.gz
修改配置文件
elasticsearch
vim -v elasticsearch-9.1.2/config/elasticsearch.yml
# 修改外網可訪問、端口號、集群節點、添加密碼驗證、日志數據存儲位置等
# ~如圖
# 關閉自動學習功能,或者更新下載插件#elasticsearch.yml插入
xpack.ml.enabled: false#或下載插件
yum install -y glibc libstdc++ libatomic
# 修改內存大小,看自己的內存,不能超過當前運行內存剩余的一半,否則會報錯
vim -v elasticsearch-9.1.2/config/jvm.options
修改最小緩存
vim -v /etc/sysctl.confvm.max_map_count=262144
#生效配置
sudo sysctl -p
如果是root用戶
# es不允許使用root啟動
#添加新分組和指定用戶,授權訪問文件,通過指定用戶訪問sudo groupadd elksudo useradd -g elk elasticsearchsudo chown -R elasticsearch:elk /usr/local/elksudo -u elasticsearch elasticsearch-9.1.2/bin/elasticsearch
啟動后
啟動后在config中自動生成certs文件(里邊為key文件)
并在elasticsearch.yml中自動插入驗證配置
修改默認賬戶密碼
可以使用自動生成和手動輸入
# 生成隨機密碼
# elastic(超級管理員,默認用戶名)
./elasticsearch-9.1.2/bin/elasticsearch-reset-password -u elastic -a
# 默認賬號
# 手動設置默認賬號的密碼
./elasticsearch-9.1.2/bin/elasticsearch-reset-password -u kibana_system -i
# kibana_system(Kibana 連接 Elasticsearch 使用的用戶)
# logstash_system(Logstash 連接 Elasticsearch 使用的用戶)
# beats_system(Filebeat/Metricbeat 等連接 Elasticsearch 使用的用戶)
# apm_system(APM Server 連接 Elasticsearch 使用的用戶)
# remote_monitoring_user(用于監控的用戶)
修改kibana.yml
vim -v kibana-9.1.2/config/kibana.yml
#修改如下
寫入es賬號密碼
kabana設置中文
在kibana.yml
如果是root用戶
# kibana同樣不允許使用root啟動
#添加新分組和指定用戶,授權訪問文件,通過指定用戶訪問
# sudo groupadd elk
# sudo useradd -g elk elasticsearch
# sudo chown -R elasticsearch:elk /usr/local/elksudo -u elasticsearch ./kibana-9.1.2/bin/kibana
修改logstash.yml (一個同步mysql的例子)
vim -v logstash-9.1.2/config/logstash.yml#修改端口號范圍、以及賬號密碼
新建conf文件
# 創建conf
touch logstash-9.1.2/config/logstash.conf
# 修改conf
vim -v logstash-9.1.2/config/logstash.conf
cd logstash-9.1.2
bin/logstash-plugin install logstash-integration-jdbc
分為三個模塊,輸入、過濾、輸出
input {file {path => "/data/workspace/workspace/work-cloud/logs/project/test-server.log" # 日志文件路徑start_position => "beginning" # 從文件開頭開始讀取(可選:改為 "end" 僅讀取新日志)sincedb_path => "NUL" # 防止記錄讀取位置(Windows下可用 "NUL")# 如果是在Linux/Mac,使用:sincedb_path => "/dev/"# 如果是在Windows,使用:sincedb_path => "NUL"}
}filter {# 使用 grok 解析日志格式grok {match => {"message" => [# 匹配時間、日志級別、線程、類名、SQL 或其他信息"%{TIMESTAMP_ISO8601:timestamp} \| %{DATA:log_level} %{NUMBER:pid} \| %{GREEDYDATA:thread_info} \| %{DATA:class_name} \| %{GREEDYDATA:log_content}"]}# 如果 grok 解析失敗,標記為 _grokparsefailuretag_on_failure => ["_grokparsefailure"]}# 提取 SQL 語句(如果日志內容包含 SQL)if [log_content] =~ /Preparing: (.+)$/ or [log_content] =~ /==> Parameters: (.+)$/ {grok {match => {"log_content" => ["Preparing: %{GREEDYDATA:sql_statement}", # 提取 "Preparing: SELECT ...""==> Parameters: %{GREEDYDATA:sql_parameters}" # 提取參數(可選)]}}}# 提取錯誤信息(如果日志級別是 ERROR 或包含異常堆棧)if [log_level] == "ERROR" or [log_content] =~ /Exception|Error/ {grok {match => {"log_content" => ["Exception: %{GREEDYDATA:exception_message}", # 提取異常信息"Caused by: %{GREEDYDATA:cause_message}" # 提取原因(可選)]}}}# 日期解析(將字符串時間轉換為 Logstash 時間格式)date {match => ["timestamp", "yyyy-MM-dd HH:mm:ss.SSS"]target => "@timestamp" # 覆蓋默認的 @timestamp 字段}# 移除不需要的字段(可選)mutate {remove_field => ["message", "timestamp", "host", "path"] # 移除原始消息和其他冗余字段}
}output {# 輸出到 Elasticsearchelasticsearch {hosts => ["http://localhost:19200"] # Elasticsearch 地址index => "scrm-server-logs-%{+YYYY.MM.dd}" # 索引名稱(按天分割)user => "logstash_system" # 如果啟用了 Elasticsearch 安全認證password => "pass" # 替換為實際密碼}# 可選:輸出到控制臺(調試用)stdout {codec => rubydebug # 以結構化格式輸出到控制臺}
}
常用 Grok 關鍵詞
關鍵詞 | 注釋 | 示例 |
---|---|---|
WORD | 非空格字符串 Hello、123 | |
NOTSPACE | 非空格的連續字符 | GET /index.html |
DATA | 任意數據(可能包含空格) | This is a test |
GREEDYDATA | 貪婪匹配(盡可能多的字符) | *(直到行尾) |
QUOTEDSTRING | 引號包裹的字符串 | “Hello World” |
IP | IPv4 地址 | 192.168.1.1 |
IPV6 | IPv6 地址 | 2001:0db8::1 |
HOSTNAME | 主機名 | example.com |
PORT | 端口號 | 8080 |
TIMESTAMP_ISO8601 | ISO8601 時間格式 | 2023-10-10T13:55:36Z |
HTTPDATE | HTTP 日期格式 | 10/Oct/2023:13:55:36 +0800 |
DATE | 通用日期格式 | 10/Oct/2023 |
METHOD | HTTP 方法 | GET、POST |
URIPATH | URI 路徑 | /index.html |
URIQUERY | URI 查詢參數 | ?id=123 |
USERAGENT | User-Agent 字符串 | Mozilla/5.0 |
NUMBER | 整數或浮點數 | 123、3.14 |
INT | 整數 | 42 |
BASE10NUM | 十進制數 | 12345 |
自定義模式
filter {grok {match => {"message" => "%{CUSTOM_PATTERN:field_name}"}patterns_dir => ["/usr/local/elk/custom_patterns"] # 可選:自定義模式文件路徑}
}
同步mysql
# 安裝jdbc插件
https://downloads.mysql.com/archives/c-j/
tar -zxvf mysql-connector-java-8.0.20.tar.gz
如果是root用戶
# kibana同樣不允許使用root啟動
#添加新分組和指定用戶,授權訪問文件,通過指定用戶訪問
# sudo groupadd elk
# sudo useradd -g elk elasticsearch
# sudo chown -R elasticsearch:elk /usr/local/elk
sudo -u elasticsearch ./logstash-9.1.2/bin/logstash -f logstash-9.1.2/config/logstashMysql.conf