ELK集中式日誌
ELK可以管理上百臺服務器的日誌信息。
- Elasticsearch是一個開源的分佈式搜索引擎,提供搜索、分析和存儲數據三大功能。它的特點有:分佈式、自動發現、索引自動分片、索引副本機制、Restful風格接口、多數據源及自動搜索負載等。(存儲日誌)
- Logstash是一個開源的用來收集、解析和過濾日誌的工具。支持幾乎任何類型的日誌,包括系統日誌、業務日誌和安全日誌。它可以從許多來源接收日誌,這些來源主要包括Syslog、消息傳遞(如RabbitMQ)和Filebeat;能夠以多種方式輸出數據,這些方式主要包括電子郵件、WebSockets和Elasticsearch.(收集日誌
或者數據庫)
- Kibana是一個基於Web的友好圖形界面,用於搜索、分析和可視化存儲在Elasticsearch中的數據。它利用Elasticsearch的RESTful接口來檢索數據,不僅允許用戶定製儀表板視圖,還允許用戶以特殊的方式查詢、彙總和過濾修改。(可視化日誌管理)
ELK的實現
第一步:安裝Elasticsearch(適當降低JVM內存分配 避免工具宕機)
集羣環境下的核心配置
https://blog.csdn.net/wang_zhenwei/article/details/50385743(更詳細的配置)
cluster.name: aubin-cluster # 集羣名稱
node.name: els1 # 節點名稱,僅僅是描述名稱,用於在日誌中區分
network.host: 192.168.0.1 # 當前節點的IP地址
http.port: 9200 # 對外提供服務的端口,9300爲集羣服務的端口
transport.tcp.port: 9300
discovery.zen.ping.unicast.hosts: ["172.18.68.11", "172.18.68.12","172.18.68.13"] # 集羣個節點IP地址,也可以使用els、els.shuaiguoxia.com等名稱,需要各節點能夠解析
discovery.zen.minimum_master_nodes: 2 # 爲了避免腦裂,集羣節點數最少爲 半數+1
這下面是必配項
集羣中節點作爲負載器、協調器、搜索器節點設置
# 配置文件中給出了三種配置高性能集羣拓撲結構的模式,如下:
# 1. 如果你想讓節點從不選舉爲主節點,只用來存儲數據,可作爲負載器
# node.master: false
# node.data: true
#
# 2. 如果想讓節點成爲主節點,且不存儲任何數據,並保有空閒資源,可作爲協調器
# node.master: true
# node.data: false
#
# 3. 如果想讓節點既不稱爲主節點,又不成爲數據節點,那麼可將他作爲搜索器,從節點中獲取數據,生成搜索結果等
# node.master: false
# node.data: false
啓動es
#普通的 進入bin目錄下
./elasticsearch -d
#Docker容器中
systemctl enable elasticsearch.service
systemctl start elasticsearch
查看節點信息
curl -XGET 'http://47.94.101.75:9200/_cat/nodes?pretty'
curl -XGET 'http://192.168.25.100:9200/_cat/nodes?pretty'
第二步:安裝Elasticsearch-Head(用於往Elasticsearch中添加索引)
1.安裝npm
https://blog.csdn.net/Aaron_Zhang939/article/details/99234999
添加模塊
npm install grunt-contrib-jasmine
2.安裝Elasticsearch-Head
yum install -y epel git
yum install -y npm
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
# 後臺啓動npm run start &
npm run start
檢查是否啓動成功:
http://192.168.25.100:9100
解決無法添加elasticsearch
需要在elasticsearch的elasticsearch.yml文件裏面添加
http.cors.enabled: true
http.cors.allow-origin: "*"
elasticsearch的查詢語句
http://IP:9200/indexName?q=123&pretty=true
http://IP:9200/indexName/_search?q=*123*pretty=true #模糊查詢
indexName是索引名字, pretty=true表示格式化輸出
?q=123表示搜索123
第三步: 安裝Logstash
https://www.cnblogs.com/cjsblog/p/9459781.html
Logstash管道有兩個必需的元素,輸入和輸出,以及一個可選元素過濾器。
輸入插件從數據源那裏消費數據,過濾器插件根據你的期望修改數據,輸出插件將數據寫入目的地。
a.下載解壓
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.1.1.tar.gz
tar -zxvf logstash-7.1.1.tar.gz -C /usr/local/logstash
b.配置Logstash /usr/local/logstash/bin
vim stdin.conf #編寫配置文件
input{
file {
path => "/var/log/nginx/access.log_json" #NGINX日誌地址 json格式
codec => "json" #json編碼
}
}
filter {
mutate {
split => ["upstreamtime", ","]
}
mutate {
convert => ["upstreamtime", "float"]
}
}
output{
elasticsearch {
hosts => ["192.168.25.100:9200"] #elasticsearch地址
index => "logstash-%{type}-%{+YYYY.MM.dd}" #索引
workers => 1
template_overwrite => true
}
}
修改config/jvm.option
-Xms128m
-Xmx128m
啓動
./logstash -f stdin.conf & #後臺啓動
建立軟連接便於操作
ln -s /usr/local/logstash/bin/logstash /bin/
測試
logstash -e 'input { stdin { } } output { stdout {} }'
第四步: 配置Nginx (作爲logstash的數據來源)
#user nobody;
worker_processes 1;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
upstream kibana4 { #對Kibana做代理
server 127.0.0.1:5601 fail_timeout=0;
}
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
log_format json '{"@timestamp":"$time_iso8601",' #配置NGINX的日誌格式 json
'"host":"$server_addr",'
'"clientip":"$remote_addr",'
'"size":$body_bytes_sent,'
'"responsetime":$request_time,'
'"upstreamtime":"$upstream_response_time",'
'"upstreamhost":"$upstream_addr",'
'"http_host":"$host",'
'"url":"$uri",'
'"xff":"$http_x_forwarded_for",'
'"referer":"$http_referer",'
'"agent":"$http_user_agent",'
'"status":"$status"}';
access_log /var/log/nginx/access.log_json json; #配置日誌路徑 json格式
error_log /var/log/nginx/error.log;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen *:80;
server_name kibana_server;
location / {
root /usr/local/nginx/html/;
index index.html index.htm;
}
}
}
啓動:
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginxelk.conf
關閉:
ps -ef |grep nginx (用戶ID 進程ID 父進程ID)
kill -9 進程號
第五步 安裝Kibana(可視化日誌管理 注意版本要與elasticsearch匹配)
a.下載解壓
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.1.1-linux-x86_64.tar.gz
tar xf kibana-7.1.1-linux-x86_64.tar.gz
b.修改配置文件
cd /usr/local/kibana-7.1.1-linux-x86_64/config
vim ./config/kibana.yml
elasticsearch.url: " 只需要修改URL爲ElasticSearch的IP地址
server.host: "0.0.0.0" #開啓遠程訪問
i18n.locale: "zh-CN" #漢化
c.啓動
./kibana & 後臺啓動
啓動成功以後 會監聽 5601端口
netstat -tunlp|grep 5601
kill -9 進程號
d.測試(設置-創建索引模式)
http://192.168.25.100:5601
設置Kabana的自動刷新
最終演示結果