ELK日志收集分析工具解析
@
1、工作當中日志的重要性
1、分析日志來判斷系統運行的狀態是否正常
2、分析日志來判斷程序是否有bug存在
3、分析日志來監控web服務器的流量,頁面的響應時間超過1s
4、分析日志來優化數據庫的慢查詢語句
5、根據用戶訪問情況針對業務側進行不斷完善
。。。。
2、日志收集的工具有那些
1、日志易(收費)
2、splunk(國外的軟件,按流量收費)
3、elk/efk工具
elasticsearch+logstash+kibana elk
elasticsearch+filebeat+kibana efk
4、Solr
Solr與es的對比與選型
在底層應用都是屬于Lucene,在應用范圍上包括淘寶電商、百度、github等,
Solr是Apach基金會下的一個頂級的開源項目,采用java開發,,他是基于Lucene的全文搜索服務器,Solr提供了比Lucene更為豐富的查詢語言,同時實現了可配置,可拓展,并對索引進行了優化
Solr可以獨立運行,運行在etty、Tomcat等這些Servlet容器中,Solr索引的實現方法很簡單,用POST方法向Solr服務器發送一個描述Field及其內容的XML文檔,Solr根據xml文檔添加、刪除、更新索引。 Solr搜索只需要發送HTTP GET請求,然后對Solr返回Xml、json等格式的查詢結果進行解析,組織頁面布局。Solr不提供構建UI的功能,Solr提供了一個管理界面,通過管理界面可以查詢Solr的配置和運行情況。
Solr是基于lucene開發企業級搜索服務器,實際上就是封裝了lucene。
Solr是一個獨立的企業級搜索應用服務器,它對外提供類似于Web-service的APl接口。用戶可以通過http請求,向搜索引擎服務器提交一定格式的文件,生成索引;也可以通過提出查找請求,并得到返回結果。
索引速度:
如果單純對已有數據進行搜索solr更快,

致命弱點: 實時建立索引會產生io阻塞,查詢性能是es的1/5

隨著數據量加大 Solr的搜索速度越來越低

ElasticSearch vs Solr總結
1、es基本是開箱即用(解壓就可以用!) ,非常簡單。Solr安裝略微復雜一丟丟!
2、Solr 利用Zookeeper進行分布式管理,而Elasticsearch自身帶有分布式協調管理功能。
3、Solr 支持更多格式的數據,比如JSON、XML、 CSV ,而Elasticsearch僅支持json文件格式。
4、Solr 官方提供的功能更多,而Elasticsearch本身更注重于核心功能,高級功能多有第三方插件提供,例如圖形化界面需要kibana友好支撐
5、Solr 查詢快,但更新索引時慢(即插入刪除慢) , 用于電商等查詢多的應用;
●ES建立索引快(即查詢慢),即實時性查詢快,用于facebook新浪等搜索。
●Solr 是傳統搜索應用的有力解決方案,但Elasticsearch 更適用于新興的實時搜索應用。
6、Solr比較成熟,有一個更大,更成熟的用戶、開發和貢獻者社區,Elasticsearch相對開發維護者較少,更新太快,學習使用成本較高。
3、elk簡單介紹
1、elasticsearch 端口號:9200 9300
非關系型的數據庫
功能:存儲數據,分析數據,搜索數據
發展史:使用java語言,在luncen的基礎上做二次封裝,提供restful接口
搜索的原理:倒排索引
特點:水平擴展方便、提供高可用、分布式存儲、使用簡單
2、logstash/filebeat
logstash功能:收集日志,中轉站
filebeat功能:專門收集日志
3、kibana 端口號: 5601
功能:做數據的展示(圖形、餅狀圖、表格、浮動云圖形)
4、倒排查詢原理
1、把信息存儲es數據庫,分成一個一個的詞語
2、根據搜索的內容,進行匹配,匹配上的語句權重加一
3、把匹配到的內存,推送給用戶
5、數據的分類
1、關系型的數據庫
mysql 、oracle 、sql-server。。
2、非關系型的數據庫
es、redis、mongodb
關系的定義:
關系型數據庫,是指采用了關系模型來組織數據的數據庫,其以行和列的形式存儲數據,以便于用戶理解,關系型數據庫這一系列的行和列被稱為表,一組表組成了數據庫。用戶通過查詢來檢索數據庫中的數據,而查詢是一個用于限定數據庫中某些區域的執行代碼。關系模型可以簡單理解為二維表格模型,而一個關系型數據庫就是由二維表及其之間的關系組成的一個數據組織。
- 性能
NOSQL是基于鍵值對的,可以想象成表中的主鍵和值的對應關系,而且不需要經過SQL層的解析,所以性能非常高。 - 可擴展性
同樣也是因為基于鍵值對,數據之間沒有耦合性,所以非常容易水平擴展。
6、es用戶場景
1、電商平臺
2、高亮顯示
3、數據的分析(elk)
Elasticsearch簡介
ElasticSearch是一個基于Lucene的搜索服務器。它提供了一個分布式多用戶能力的全文搜索引擎,基于RESTful web接口。
Elasticsearch 是一個分布式的、開源的搜索分析引擎,支持各種數據類型,包括文本、數字、地理、結構化、非結構化。
Elasticsearch 是基于 Apache Lucene 的。
Elasticsearch 因其簡單的 REST API、分布式特性、可塑、可擴展而聞名。
Elasticsearch 是 Elastic 產品棧的核心,Elastic 產品棧是個開源工具集合,用于數據接收、存儲、分析、可視化
- 文檔搜索結合ElasticSearch高亮顯示,輸入實時搜索(search-asyour-type)和糾錯(did-you-main)顯示
- 英國衛報結合ElasticSearch結合用戶日志和社交網絡數據給用戶實時反饋
- Github使用ElasticSearch檢索1300億行代碼
7、部署es的方法
1、源碼的方式:
特點:安裝之后的路徑統一,需要手動寫啟動腳本
2、rpm的方式:
特點:安裝之后路徑分散,不需要手動寫啟動腳本
3、docker的方式:
特點:會使用docker,專人來維護
部署es的流程
1、安裝jdk環境
mkdir /opt/es-software
cd /opt/es-software
rpm -ivh jdk-8u102-linux-x64.rpm
java -version
2、安裝elasticsearch
rpm -ivh elasticsearch-6.6.0.rpm
rpm -qc elasticsearch
3、簡單介紹安裝后的文件的作用
/etc/elasticsearch/elasticsearch.yml#es的主要配置文件
/etc/elasticsearch/jvm.options #配置jvm虛擬機的內存信息
/etc/sysconfig/elasticsearch #配置相關系統變量
/usr/lib/sysctl.d/elasticsearch.conf#配置相關系統變量
/usr/lib/systemd/system/elasticsearch.service#es的服務程序
4、修改es的主配置文件
[root@es01 elasticsearch]# grep -Ev '^$|#' /etc/elasticsearch/elasticsearch.yml
23:node.name: gaoxu01
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
43:bootstrap.memory_lock: true
network.host: 10.0.0.240
http.port: 9200
5、服務啟動后有報錯
tail -f /var/log/elasticsearch/elasticsearch.log
[2020-04-08T13:29:53,773][ERROR][o.e.b.Bootstrap ] [gaoxu01] node validation exception
[1] bootstrap checks failed
[1]: memory locking requested for elasticsearch process but memory is not locked
#解決方法
官網地址: https://www.elastic.co/guide/en/elasticsearch/reference/6.6/index.html memory_lock_check
systemctl edit elasticsearch
[Service]
LimitMEMLOCK=infinity
#重新載入
systemctl daemon-reload
#重新es服務
systemctl restart elasicsearch
#查詢端口
netstat -lntup
ss -lnt
#命令行的方式檢查
curl http://10.0.0.240:9200
curl http://localhost:9200
8、和es交互的方式
8.1、了解概念
1、索引:相當于在mysql當中創建一個數據庫(database)
2、類型:相當于數據庫當中的一張表(table)
3、docs:表中字段信息
ES常用的數據類型可分為3大類
- 核心數據類型
- 復雜數據類型
- 專業數據類型
核心數據類型
(1)字符串
- text 屬于全量索引,搜索時會自動使用分詞器進?分詞再匹配
- keyword 不分詞,搜索時需要匹配完整的值
(2)數值型
- 整型: byte,short,integer,long
- 浮點型: float, half_float, scaled_float,double
(3)日期類型
- date
json沒有date類型,插入|更新文檔|字段時怎么表示date類型?
#mapping,將字段類型設置為date
"type" : "date"
#插入|更新此字段的值時,有3種表示方式
#使用固定格式的字符串
"2020-04-18"、"2020/04/18 09:00:00"
#值使用長整型的時間戳,1970-01-01 00:00:00,s
1610350870
#值使用長整型的時間戳,ms
1641886870000
(4)范圍型
integer_range, long_range, float_range,double_range,date_range
比如招聘要求年齡在[20, 40]上,mapping:
age_limit :{
"type" : "integer_range"
}
插入|更新文檔|字段時,值寫成json對象的形式:
"age_limit" : {
"gte" : 20,
"lte" : 40
}
http://www.rzrgm.cn/chy18883701161/archive/2020/04/18/12723658.html
8.2、使用命令行的方式和es交互
常用的方法
PUT\POST\DELETE\GET
1、創建一個索引
curl -XPUT http://10.0.0.240:9200/gaoxu
2、往這個索引里面寫入一條數據
curl -XPUT '10.0.0.211:9200/gaoxu/student/1?pretty' -H 'Content-Type: application/json' -d'
{
"first_name" : "zhang",
"last_name": "san",
"age" : 28,
"about" : "I love to go rock climbing",
"interests": [ "sports" ]
}'
## 內容解析
本質es屬于數據庫, gaoxu為數據庫庫名(索引),student為一張表(類型)
1 :指定一個唯一id號
pretty:固定格式
-H: 頭信息
-d: 數據內容
## 索引有多少索引:
curl http://localhost:9200/_cat/indices?v
根據索引往下查詢type類型
curl -XGET http://localhost:9200/uccaut
根據type類型往下細分具體查找
curl -XGET http://localhost:9200/uccaut/custom
curl -XGET http://localhost:9200/uccaut/commodity/10089?pretty
3、寫第二條數據
curl -XPUT '10.0.0.240:9200/gaoxu/student/2?pretty' -H 'Content-Type: application/json' -d' {
"first_name": "li",
"last_name" : "si",
"age" : 32,
"about" : "I like to collect rock albums",
"interests": [ "music" ]
}'
4、隨機生成一個id,寫入數據
curl -XPOST '10.0.0.240:9200/gaoxu/student/?pretty' -H 'Content-Type: application/json' -d' {
"first_name": "li",
"last_name" : "mingming",
"age" : 45,
"about": "I like to swime",
"interests": [ "reading" ]
}'
5、查詢指定id為1的數據信息
curl -XGET '10.0.0.240:9200/gaoxu/student/1?pretty'
6、查詢指定索引的所有數據
curl -XGET '10.0.0.240:9200/gaoxu/_search/?pretty'
7、刪除指定id為1的數據
curl -XDELETE '10.0.0.240:9200/gaoxu/student/1?pretty'
8、刪除指定索引里面所有的數據,包括索引本身
curl -XDELETE '10.0.0.240:9200/gaoxu/?pretty'
8.3、使用插件head和es交互
#部署head插件有多種方法
1、nodejs npm
2、谷歌自帶的head插件
3、docker的方式來部署
通過head插件寫入數據
1、創建一個索引
http://10.0.0.240:9200/gaoxu PUT
2、插入數據:
http://10.0.0.240:9200/gaoxu/student/1 PUT
{
"first_name":"lao",
"last_name":"wang",
"age":25,
"about":"I love to go rock climbing",
"interests":["sports"]
}
3、插入第二條數據:
http://10.0.0.240:9200/gaoxu/student/2 PUT
{
"first_name":"wang",
"last_name":"wu",
"age":27,
"about":"I love to go rock climbing",
"interests":["music"]
}
4、不指定id號隨機插入一條數據:
put不支持隨機分配id號,post支持隨機分配id號
http://10.0.0.240:9200/gaoxu/student/ POST
{
"first_name":"zhao",
"last_name":"liu",
"age":29,
"about":"I love to go rock climbing",
"interests":["eatting"]
}
5、查詢指定id號的數據信息:
http://10.0.0.240:9200/gaoxu/student/1 GET
6、查詢指定索引所有數據信息:
http://10.0.0.240:9200/gaoxu/_search GET
7、刪除指定的數據:
http://10.0.0.240:9200/gaoxu/student/1 DELETE
8、刪除指定索引里面的數據:
http://10.0.0.240:9200/gaoxu/ DELETE
8.4、使用nodejs方式來部署head插件
1、安裝epel源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
2、安裝 nodejs npm
yum install nodejs npm openssl screen -y#配置nodejs環境
3、安裝組件
npm install -g cnpm --registry=https://registry.npm.taobao.org
4、克隆代碼
官網https://github.com/mobz/elasticsearch-head
cd /opt/
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head/
cnpm install
screen -S es-head
cnpm run start
Ctrl+A+D
5、修改es配置文件最下面加入下面內容
vim /etc/elasticsearch/elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"
#重啟es服務
systemctl restart elasticsearch
6、出現node版本不兼容
cd /opt/es-software
tar xf node-v12.13.0-linux-x64.tar.xz -C /opt
ln -s /opt/node-v12.13.0-linux-x64 /opt/node
#添加環境變量
vim /etc/profile
export PATH=/opt/node/bin:$PATH
#把環境變更生效
source /etc/profile
#重新安裝
cnpm install

浙公網安備 33010602011771號