監控規劃
現有監控主要以zabbix為主,監控服務器的磁盤、CPU、內存、網絡等,拉取部分錯誤日志,業務進程、端口等監控。對線上的其他日志并未拉取。關于zabbix使用可以參考相關文檔,本文主要是針對ELK的日志監控和展示部署和測試。以及ELK自帶的APM監控測試。
1、ELK 部署
一個完整的集中式日志系統,需要包含以下幾個主要特點:
收集-能夠采集多種來源的日志數據
傳輸-能夠把日志數據傳輸到存儲系統
存儲-存儲日志數據
分析-可以支持日志分析,并提供高效的檢索
警告-能夠提供錯誤告警機制
而ELK則提供了一整套解決方案,并且都是開源軟件,之間互相配合使用,完美銜接,高效的滿足了很多場合的應用。是目前主流的一種日志系統。
ELK分別為:Elasticsearch 、 Logstash以及Kibana 。新增加的Beats占用資源少,適合于在各個服務器上搜集日志,官方也推薦此工具。
Elastic Stack包含:
Elasticsearch是個開源分布式搜索引擎,提供搜集、分析、存儲數據三大功能。它的特點有:分布式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。詳細可參考Elasticsearch權威指南
Logstash 主要是用來日志的搜集、分析、過濾日志的工具,支持大量的數據獲取方式。負責將收到的各節點日志進行過濾、修改等操作在一并發往elasticsearch上去。(現在基本只使用sever端,客戶端建議使用Beats)
Kibana 也是一個開源和免費的工具,Kibana可以為 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以幫助匯總、分析和搜索重要數據日志。
Beats是一個輕量級日志采集器, 目前Beats包含六種工具:
Packetbeat: 網絡數據(收集網絡流量數據)
Metricbeat: 指標 (收集系統、進程和文件系統級別的 CPU 和內存使用情況等數據)可以用來做服務器監控采集工具
Filebeat: 日志文件(收集文件數據)(常用)
Winlogbeat: windows事件日志(收集 Windows 事件日志數據)
Auditbeat:審計數據 (收集審計日志)
Heartbeat:運行時間監控 (收集系統運行時的數據)
MySQLbeat: 收集mysql數據性能*(第三方工具)
x-pack工具:
x-pack在 Elastic Stack6.3.1后已經集成到ELK安裝包中不在需要重新安裝。提供了安全、警報、監控、報表、圖表于一身的擴展包,是收費的。網絡上有破解教程,本文暫時不涉及破解,只試用30天。
參考:
https://blog.51cto.com/zero01/2079879
https://blog.51cto.com/zero01/2082794
官網:https://www.elastic.co/cn/
Elasticsearch權威指南:https://www.gitbook.com/book/chenryn/elk-stack-guide-cn/details
性能監控(APM):https://blog.51cto.com/kbsonlong/2312113
展示:https://grafana.com/
Kafka:https://www.cnblogs.com/likehua/p/3999538.html
其他搜索關鍵詞:ELK,ELK+filebeat+kafka,filebeat ,logstash
如果想弄明白某一功能只需要使用相關關鍵詞查找,遇到的各種報錯也是需要搜索就可以,你不是第一個遇到此問題的人(可以查詢到)、你不是最后一個遇到此問題的人(記錄下解決辦法)
在測試部署過程遇到過一些問題,并未在此文檔中記錄,此文檔只做簡單說明,并且是安裝文檔,不是問題收集文檔,所有問題都有解決辦法在互聯網。
1.1 、ElasticSearch部署配置
elk需要使用java運行環境,在此之前需要安裝jdk1.8(建議1.8以上)
根據官網可以看到有多種安裝方式可以選擇,在linux系統下部署本文選擇rpm方式,在rpm方式下又有rpm包安裝和yum安裝兩種。
Yum安裝方式:
1. 導入公鑰:
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
若出現報錯ssl類的報錯可以yum -y update nss,多嘗試添加幾次
2. 編輯yum源:
vim /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
#使用不同版本這里添加不同數字,并且確認是否可用
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
檢查是否可用
yum list |grep elasticsearch #檢查
yum install elasticsearch #安裝,由于文件比較大所以下載需要很長時間
RPM包:
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.0.1-x86_64.rpm
rpm --install elasticsearch-7.0.1-x86_64.rpm
可用使用RPM查看安裝的默認位置:rpm -ql elasticsearch
使用上述安裝方式無法再一臺主機實現多實例功能,可用使用源碼方式,在不同文件夾中拷貝解壓出來的文件,修改配置文件參數,可用在一臺機器運行多實例,繼而在一臺機器測試集群功能。
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.0.1-linux-x86_64.tar.gz
tar -xzf elasticsearch-7.0.1-linux-x86_64.tar.gz
cd elasticsearch-7.0.1/
配置文件
/etc/elasticsearch/elasticsearch.yml
/etc/sysconfig/elasticsearch
elasticsearch.yml 文件用于配置集群節點等相關信息的
elasticsearch 文件則是配置服務本身相關的配置,可用用來指定java文件位置
jvm.options配置程序運行虛擬java參數包括堆內存等優化
vi /etc/elasticsearch/elasticsearch.yml
# ---------------------------------- Cluster -----------------------------------
cluster.name: test #設置集群名稱,在同一個網絡環境下相同集群名稱會添加到一起
#
# ------------------------------------ Node ------------------------------------
node.name: node-1 #節點名稱,在相同的集群下,加點叫什么名字,不要重復
node.master: true # 節點功能,建議查看https://www.cnblogs.com/37yan/p/9928748.html
node.data: true
#node.ingest: true
#index.number_of_shards: 1 #數據分片數,默認為5,有時候設置為3 在測試中發現安裝的7.0 版本默認為1
# ----------------------------------- Paths ------------------------------------
path.data: /var/lib/elasticsearch #數據存儲位置
path.logs: /var/log/elasticsearch #日志存儲位置
# ----------------------------------- Memory -----------------------------------
bootstrap.memory_lock: false
bootstrap.system_call_filter: false #此處特別注意,centos6.0 不支持SecComp,如果此處是ture會報錯
# ---------------------------------- Network -----------------------------------
network.host: 172.16.15.53 #綁定網卡信息
http.port: 9200 #服務端口信息
transport.tcp.port: 9300 #集群傳輸端口
# --------------------------------- Discovery ----------------------------------
discovery.seed_hosts: ["172.16.15.53","172.16.15.26","172.16.15.44" ] #集群中自動發現的機器
cluster.initial_master_nodes: ["172.16.15.53","172.16.15.26","172.16.15.44"]
#機器中可以作為主節點的機器
以上是配置是常用配置文件,設置完成以后可以使用命令啟動:
service elasticsearch start #(yum和rpm安裝)
#xxx/bin/elasticsearch start #解壓位置啟動
啟動后查看需要注意兩個端口都需要在防火墻開通
如果啟動出現報錯,根據報錯信息查找解決方案。可以參考:
https://www.cnblogs.com/configure/p/7479988.html
特別注意:elasticsearch是需要java環境的,所以在安裝前需要安裝配置JDK1.8 安裝比較簡單
如果是集群在多臺機器上都需要安裝部署,配置文件根據需要修改對應參數:
例如相同的集群名稱,不同的節點信息等
如果是在單機部署多實例只能使用源碼安裝,并配置多個端口
可以在瀏覽器中查看ES集群情況:http://172.16.15.53:9200/_cluster/health?pretty
瀏覽器中查看單個節點情況:http://172.16.15.53:9200
關于elasticsearch-head插件https://github.com/mobz/elasticsearch-head
可以看到有多種方式,本文選擇了Chrome插件方式,比較簡單也不需要在服務器部署運行等。
1.2 、Logstash部署配置
與elasticsearch類似也分三種安裝方式:yum,rpm,源碼二進制
Yum安裝:
設置yum源和elasticsearch一樣,如果是相同的機器不需要設置:
yum install logstash –y
下載頁面:https://www.elastic.co/cn/downloads/logstash
配置文件:
vim /etc/logstash/logstash.yml #此配置文件主要用來配置logstash本身,下屬三個參數根據需要配置即可。
path.data: /var/lib/logstash
http.host: "172.16.15.53"
path.logs: /var/log/logstash
logstash主要配置文件是需要新建
測試:
vim /etc/logstash/conf.d/syslog.conf
input { # 定義日志源
syslog {
type => "system-syslog" # 定義類型
port => 10514 # 定義監聽端口
}
}
output { # 定義日志輸出
elasticsearch {
hosts => ["172.16.15.53:9200"] # 定義es服務器的ip
index => "system-syslog-%{+YYYY.MM}" # 定義索引
}
}
在配置主機上rsyslog轉發系統日志到10514端口即可
vim /etc/rsyslog.conf
*.* @@172.16.15.53:10514 #根據自己情況修改ip和端口 @@代表使用tcp端口
關于logstash配置文件使用可以參考:
Logstash 分為 Input、Output、Filter、Codec 等多種plugins。
Input:數據的輸入源也支持多種插件,如elk官網的beats、file、graphite、http、kafka、redis、exec等等等
Output:數據的輸出目的也支持多種插件,如本文的elasticsearch,當然這可能也是最常用的一種輸出。以及exec、stdout終端、graphite、http、zabbix、nagios、redmine等等
Filter:使用過濾器根據日志事件的特征,對數據事件進行處理過濾后,在輸出。支持grok、date、geoip、mutate、ruby、json、kv、csv、checksum、dns、drop、xml等等
Codec:編碼插件,改變事件數據的表示方式,它可以作為對輸入或輸出運行該過濾。和其它產品結合,如rubydebug、graphite、fluent、nmap等等。
參考測試的配置文件:
input {
#file {#本機的文件 第一次建議使用這個拉取 數據,后續在考慮使用beats和kafka
#path => "/home/app/tengine/logs/access.log"
#type => "nginx"
#start_position => "beginning"
# }
# beats { #beats 發送過來的文件
# port => 5044
# }
kafka { #-從kafka拉取數據
bootstrap_servers => "172.16.15.26:9092"
consumer_threads => 1
topics => ["system"]
}
}
filter { #過濾
json {
source => "message"
}
if "nginx" in [tags]{
grok {
match => { "message" => "%{IPORHOST:http_host} %{IPORHOST:clientip} - %{USERNAME:remote_user} \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:http_verb} %{NOTSPACE:http_request}(?: HTTP/%{NUMBER:http_version})?|%{DATA:raw_http_request})\" %{NUMBER:response} (?:%{NUMBER:bytes_read}|-) %{QS:referrer} %{QS:http_agent} %{QS:xforwardedfor} %{NUMBER:request_time:float}"} *#* *定義日志的輸出格式*
}
geoip {
source => "clientip"
}
}
}
output { # 定義日志輸出
if "nginx" in [tags]{ #根據關鍵字區分不同類型數據,關鍵字在filebeat中配置
elasticsearch {
hosts => ["172.16.15.53:9200"] #定義es服務器的ip
index => "nginx-%{+YYYY.MM.dd}" # 定義索引
}}
else if "system" in [tags]{
elasticsearch {
hosts => ["172.16.15.53:9200"] #定義es服務器的ip
index => "system-%{+YYYY.MM.dd}" #定義索引
}}
else{
elasticsearch {
hosts => ["172.16.15.53:9200"] #定義es服務器的ip
index => "mysql-%{+YYYY.MM.dd}" #定義索引
} }}
啟動logstash
在centos6 使用yum安裝的logstash7.0 啟動時有點問題請注意;參考官網文檔
https://www.elastic.co/guide/en/logstash/7.0/running-logstash.html
使用service logstash start/stop 是無法運行的。由于保護進程原因需要使用initctl 才能關閉,建議使用
ln -s /usr/share/logstash/bin/logstash /bin/
initctl stop logstash
nohup logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/filebeat.conf & #后臺運行指定配置文件
啟動后可以在elasticsearch-head中查看是否收到文件,需要注意系統中有日志產生才會生成的文件,可以看到索引文件和原始數據
1.3 、Kibana部署配置
在設置好yum源的機器yum -y install kibana
配置文件/etc/kibana/kibana.yml
server.port: 5601 #端口
server.host: 172.16.15.53 #綁定ip
elasticsearch.hosts: ["http://172.16.15.53:9200","http://172.16.15.26:9200"] #調用的es集群,可以寫多個
logging.dest: /var/log/kibana.log #日志
i18n.locale: "zh-CN" #設置中文
其他配置文件可以根據需要設置
啟動:service kibana start
啟動后注意防火墻設置,訪問http://172.16.15.53:5601
如果出現報錯,無法連接es等,可以稍等會
由于我們沒有啟動x-pack,不需要登錄名和密碼
1. 開始添加索引
左邊欄最后管理——索引模式-創建索引模式-輸入匹配的名稱(例如nginx-*)-下一步選擇時間-最后創建索引模式即可。
2. 查看剛剛匹配的文件
左側邊欄的dicover