ELK簡單介紹一

任務背景

運維人員需要對系統和業務日志進行精準把控,便于分析系統和業務狀態。日志分布在不同的服務器上,傳統的使用傳統的方法依次登錄每臺服務器查看日志,既繁瑣又效率低下。所以我們需要==集中化==的日志管理工具將位于不同服務器上的日志收集到一起, 然后進行分析,展示

前面我們學習過rsyslog,它就可以實現集中化的日志管理,可是rsyslog集中后的日志實現統計與檢索又成了一個問題。使用wc, grep, awk等相關命令可以實現統計與檢索,但如果要求更高的場景,這些命令也會力不從心。所以我們需要一套專業的日志收集分析展示系統。

總結:

1、日志是用于記錄系統或業務的狀態

2、通過日志可以獲得系統或業務的狀態,并進行分析。

3、早期的日志是分散在各主機上

4、通過rsyslog實現本地日志管理,收集,輪轉,集中管理

5、早期的日志分析方法:wc,grep,awk

6、集中式的日志收集、分析、展示系統

任務要求

1, 搭建ELK集群

2, 收集日志信息并展示

任務拆解

1, 認識ELK

2, 部署elasticsearch集群并了解其基本概念

3, 安裝elasticsearch-head實現圖形化操作

4, 安裝logstash收集日志

5, 安裝kibana日志展示

6, 安裝file beat實現輕量級日志收集

學習目標

  • 能夠說出ELK的應用場景
  • 能夠區分ELK架構中elasticsearch,logstash,kibina三個軟件各自的主要功能
  • 能夠單機部署elasticsearch
  • 能夠部署elasticsearch集群
  • 理解ELK中索引的概念
  • 能夠部署logstash
  • 能夠使用logstash做日志采集

認識ELK

ELK是一套開源的日志分析系統,由elasticsearch+logstash+Kibana組成。

官網說明:使用 Elastic 解決方案推動重要結果的交付 | Elastic

首先: 先一句話簡單了解E,L,K這三個軟件

elasticsearch: 分布式搜索引擎

logstash: 日志收集與過濾,輸出給elasticsearch

Kibana: 圖形化展示

elk下載地址:下載 Elastic 產品 | Elastic

環境準備:

四臺機器(內存建議大于1G,比如1.5G; filebeat服務器可為1G) :

1,靜態IP(要求能上公網,最好用虛擬機的NAT網絡類型上網)

2,主機名及主機名綁定

10.1.1.11   vm1.cluster.com     kibana
10.1.1.12   vm2.cluster.com     elasticsearch
10.1.1.13   vm3.cluster.com     logstash
10.1.1.14   vm4.cluster.com     filebeat

3, 關閉防火墻和selinux

# systemctl stop firewalld
# systemctl disable firewalld
# iptables -F
# setenforce 0
setenforce: SELinux is disabled

4, 時間同步

# systemctl restart ntpd
# systemctl enable ntpd

5, yum源(centos安裝完系統后的默認yum源就OK)

elasticsearch

elasticsearch簡介

Elasticsearch(簡稱ES)是一個開源的分布式搜索引擎,Elasticsearch還是一個分布式文檔數據庫。所以它提供了大量數據的存儲功能,快速的搜索分析功能。

提到搜索,大家肯定就想到了百度,谷歌,必應等。當然也有如下的搜索場景。

elasticsearch部署

第1步: 在elasticsearch服務器上(我這里為vm2),確認jdk(使用系統自帶的openjdk就OK)

[root@vm2 ~]# rpm -qa |grep openjdk
java-1.8.0-openjdk-headless-1.8.0.161-2.b14.el7.x86_64
java-1.8.0-openjdk-1.8.0.161-2.b14.el7.x86_64
[root@vm2 ~]# java -version
openjdk version "1.8.0_161"
OpenJDK Runtime Environment (build 1.8.0_161-b14)
OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)

第2步: es的安裝,配置

[root@vm2 ~]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.2.rpm
[root@vm2 ~]# rpm -ivh elasticsearch-6.5.2.rpm

第3步: 單機es的配置與服務啟動

[root@vm2 ~]# cat /etc/elasticsearch/elasticsearch.yml |grep -v "#"
cluster.name: elk-cluster   可以自定義一個集群名稱,不配置的話默認會取名為elasticsearch
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0                           打開注釋,并修改為監聽所有
http.port: 9200                                 打開注釋,監聽端口9200
?
[root@vm2 ~]# systemctl start elasticsearch
[root@vm2 ~]# systemctl enable elasticsearch
?
啟動有點慢和卡,稍等1分鐘左右,查看到以下端口則表示啟動OK
[root@vm2 ~]# netstat -ntlup |grep java
tcp6 ? ? ? 0 ? ? ?0 :::9200 ? ? ? ? ? ? ? ? :::* ? ? ? ? ? ? ? ? ? ?LISTEN ? ? ?5329/java ? ? ? ? ? 
tcp6 ? ? ? 0 ? ? ?0 :::9300 ? ? ? ? ? ? ? ? :::* ? ? ? ? ? ? ? ? ? ?LISTEN ? ? ?5329/java
?
9200則是數據傳輸端口
9300端口是集群通信端口(我們暫時還沒有配置集群,現在是單點elasticsearch)

第4步: 查看狀態

使用curl命令或瀏覽器訪問http://10.1.1.12:9200/_cluster/health?pretty地址(IP為ES服務器IP)

[root@vm2 ~]# curl http://10.1.1.12:9200/_cluster/health?pretty

elasticsearch集群部署

集群部署主要注意以下幾個方面

  1. 集群配置參數:

    • discovery.zen.ping.unicast.hosts,Elasticsearch默認使用Zen Discovery來做節點發現機制,推薦使用unicast來做通信方式,在該配置項中列舉出Master節點。

    • discovery.zen.minimum_master_nodes,該參數表示集群中Master節點可工作Master的最小票數,默認值是1。為了提高集群的可用性,避免腦裂現象。官方推薦設置為(N/2)+1,其中N是具有Master資格的節點的數量。

    • discovery.zen.ping_timeout,表示節點在發現過程中的等待時間,默認值是30秒,可以根據自身網絡環境進行調整,一定程度上提供可用性。

  2. 集群節點:

    • 節點類型主要包括Master節點和data節點(client節點和ingest節點不討論)。通過設置兩個配置項node.master和node.data為true或false來決定將一個節點分配為什么類型的節點。

    • 盡量將Master節點和Data節點分開,通常Data節點負載較重,需要考慮單獨部署。

  3. 內存:

    • Elasticsearch默認設置的內存是1GB,對于任何一個業務部署來說,這個都太小了。通過指定ES_HEAP_SIZE環境變量,可以修改其堆內存大小,服務進程在啟動時候會讀取這個變量,并相應的設置堆的大小。建議設置系統內存的一半給Elasticsearch,但是不要超過32GB。

  4. 硬盤空間:

    • Elasticsearch默認將數據存儲在/var/lib/elasticsearch路徑下,隨著數據的增長,一定會出現硬盤空間不夠用的情形,大環境建議把分布式存儲掛載到/var/lib/elasticsearch目錄下以方便擴容。

配置參考文檔: Elasticsearch Guide | Elastic

首先在ES集群所有節點都安裝ES(步驟省略)

可以使用兩臺或兩臺以上ES做集群, 以下就是兩臺ES做集群的配置

[root@vm1 ~]# cat /etc/elasticsearch/elasticsearch.yml |grep -v "#"
cluster.name: elk-cluster
node.name: 10.1.1.11                    本機IP或主機名
node.master: false                      指定不為master節點
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["10.1.1.11", "10.1.1.12"]        集群所有節點IP
[root@vm2 ~]# cat /etc/elasticsearch/elasticsearch.yml |grep -v "#"
cluster.name: elk-cluster
node.name: 10.1.1.12                    本機IP或主機名
node.master: true                       指定為master節點
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["10.1.1.11", "10.1.1.12"]        集群所有節點IP

啟動或重啟服務

[root@vm1 ~]# systemctl restart elasticsearch
[root@vm1 ~]# systemctl enable elasticsearch
[root@vm2 ~]# systemctl restart elasticsearch

查看狀態

json(java script object notation)java對象表示法

elasticsearch基礎概念

主要的基礎概念有:Node, Index,Type,Document,Field,shard和replicas.

Node(節點):運行單個ES實例的服務器

Cluster(集群):一個或多個節點構成集群

Index(索引):索引是多個文檔的集合

Type(類型):一個Index可以定義一種或多種類型,將Document邏輯分組

Document(文檔):Index里每條記錄稱為Document,若干文檔構建一個Index

Field(字段):ES存儲的最小單元

Shards(分片):ES將Index分為若干份,每一份就是一個分片

Replicas(副本):Index的一份或多份副本

為了便于理解,我們和mysql這種關系型數據庫做一個對比:

關系型數據庫(如mysql,oracle等)elasticsearch
database或schemaindex
tabletype
rowdocument
column或fieldfield

ES是分布式搜索引擎,每個索引有一個或多個分片(shard),索引的數據被分配到各個分片上。你可以看作是一份數據分成了多份給不同的節點。

當ES集群增加或刪除節點時,shard會在多個節點中均衡分配。默認是5個primary shard(主分片)和1個replica shard(副本,用于容錯)。

elaticsearch基礎API操作

前面我們通過http://10.1.1.12:9200/_cluster/health?pretty查看ES集群狀態,其實就是它的一種API操作。

什么是API?

API(Application Programming Interface)應用程序編程接口,就是無需訪問程序源碼或理解內部工作機制就能實現一些相關功能的接口。

RestFul API 格式

curl -X<verb> ‘<protocol>://<host>:<port>/<path>?<query_string>’-d ‘<body>’

參數描述
verbHTTP方法,比如GET、POST、PUT、HEAD、DELETE
hostES集群中的任意節點主機名
portES HTTP服務端口,默認9200
path索引路徑
query_string可選的查詢請求參數。例如?pretty參數將返回JSON格式數據
-d里面放一個GET的JSON格式請求主體
body自己寫的 JSON格式的請求主體

elasticseearch的API很多, 我們運維人員主要用到以下幾個要介紹的較簡單的API。

更多API參考: Elasticsearch Reference [6.2] | Elastic

查看節點信息

通過curl或瀏覽器訪問http://10.1.1.12:9200/_cat/nodes?v(ip為ES節點IP,如果有ES集群,則為ES任意節點IP)

[root@vm2 ~]# curl http://10.1.1.12:9200/_cat/nodes?v
ip ? ? ? ?heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
10.1.1.12 ? ? ? ? ? 29 ? ? ? ? ?94 ? 2 ? ?2.33 ? ?1.88 ? ? 0.85 mdi ? ? ? - ? ? ?10.1.1.12
10.1.1.11 ? ? ? ? ? 26 ? ? ? ? ?92 ? 0 ? ?0.24 ? ?0.37 ? ? 0.33 mdi ? ? ? * ? ? ?10.1.1.11

查看索引信息

通過curl或瀏覽器訪問http://10.1.1.12:9200/_cat/indices?v

[root@vm2 ~]# curl http://10.1.1.12:9200/_cat/indices?v
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
默認現在沒有任何索引

新增索引

[root@vm2 ~]# curl -X PUT http://10.1.1.12:9200/nginx_access_log
{"acknowledged":true,"shards_acknowledged":true,"index":"nginx_access_log"}[root@vm2 ~]# curl  http://10.1.1.12:9200/_cat/indices?v
health status index            uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   nginx_access_log 90Z7DvInTz6seXMBYhHVAw   5   1          0            0      2.2kb          1.1kb460b

green:所有的主分片和副本分片都已分配。你的集群是100%可用的。

yellow:所有的主分片已經分片了,但至少還有一個副本是缺失的。不會有數據丟失,所以搜索結果依然是完整的。不過,你的高可用性在某種程度上被弱化。如果 更多的 分片消失,你就會丟數據了。把 yellow 想象成一個需要及時調查的警告。

red:至少一個主分片(以及它的全部副本)都在缺失中。這意味著你在缺少數據:搜索只能返回部分數據,而分配到這個分片上的寫入請求會返回一個異常。


刪除索引

[root@vm2 ~]# curl -X DELETE http://10.1.1.12:9200/nginx_access_log
{"acknowledged":true}

ES查詢語句(拓展了解)

ES提供一種可用于執行查詢JSON式的語言,被稱為Query DSL。

針對elasticsearch的操作,可以分為增、刪、改、查四個動作。

查詢匹配條件:

  • match_all

  • from,size

  • match

  • bool

  • range

查詢應用案例:

導入數據源

使用官方提供的示例數據:

1, 下載并導入進elasticsearch

[root@vm2 ~]# wget https://raw.githubusercontent.com/elastic/elasticsearch/master/docs/src/test/resources/accounts.json
?
導入進elasticsearch
[root@vm2 ~]# curl -H "Content-Type: application/json" -XPOST "10.1.1.12:9200/bank/_doc/_bulk?pretty&refresh" --data-binary "@accounts.json"
?
查詢確認
[root@vm2 ~]# curl "10.1.1.12:9200/_cat/indices?v"
health status index ? ? ?uuid ? ? ? ? ? ? ? ? ? pri rep docs.count docs.deleted store.size pri.store.size
green ?open ? bank ? ? ? CzFQ_Gu1Qr2-bpV5MF0OBg ? 5 ? 1 ? ? ? 1000 ? ? ? ? ? ?0 ? ?874.7kb ? ? ? ?434.4kb

2, 查詢bank索引的數據(使用查詢字符串進行查詢)

[root@vm2 ~]# curl -X GET "10.1.1.12:9200/bank/_search?q=*&sort=account_number:asc&pretty"說明:
默認結果為10條
_search  屬于一類API,用于執行查詢操作
q=* ES批量索引中的所有文檔
sort=account_number:asc 表示根據account_number按升序對結果排序
pretty調整顯示格式

3, 查詢bank索引的數據 (使用json格式進行查詢)

[root@vm2 ~]# curl -X GET "10.1.1.12:9200/bank/_search" -H 'Content-Type: application/json' -d'
{"query": { "match_all": {} },"sort": [{ "account_number": "asc" }]
}
'
注意: 最后為單引號

問題: 怎么將上面json格式進行pretty查詢?

查詢匹配動作及案例:

  • match_all

    • 匹配所有文檔。默認查詢

    • 示例:查詢所有,默認只返回10個文檔

[root@vm2 ~]# curl -X GET "10.1.1.12:9200/bank/_search?pretty" -H 'Content-Type: application/json' -d'
{"query": { "match_all": {} }
}
'
?
# query告訴我們查詢什么
# match_all是我們查詢的類型
# match_all查詢僅僅在指定的索引的所有文件進行搜索

  • from,size

    • 除了query參數外,還可以傳遞其他參數影響查詢結果,比如前面提到的sort,接下來使用的size

[root@vm2 ~]# curl -X GET "10.1.1.12:9200/bank/_search?pretty" -H 'Content-Type: application/json' -d'
{"query": { "match_all": {} },"size": 1
}
'
查詢1條數據

指定位置與查詢條數

[root@vm2 ~]# curl -X GET "10.1.1.12:9200/bank/_search?pretty" -H 'Content-Type: application/json' -d'
{"query": { "match_all": {} },"from": 0,                                "size": 2
}
'
from 0表示從第1個開始
size 指定查詢的個數

示例: 查詢account_number從第501條到510條的數據

curl -X GET "10.1.1.12:9200/bank/_search?pretty" -H 'Content-Type: application/json' -d'
{"query": { "match_all": {} },"from": 500,"size": 10,"sort": [{ "account_number": "asc" }]
}
' 2>/dev/null |grep account_number

  • 匹配查詢字段

    • 返回_source字段中的片段字段

[root@vm2 ~]# curl -X GET "10.1.1.12:9200/bank/_search?pretty" -H 'Content-Type: application/json' -d'
{"query": { "match_all": {} },"_source": ["account_number", "balance"]
}
'

  • match

    • 基本搜索查詢,針對特定字段或字段集合進行搜索

查詢編號為20的賬戶

[root@vm2 ~]# curl -X GET "10.1.1.12:9200/bank/_search?pretty" -H 'Content-Type: application/json' -d'
{"query": { "match": { "account_number": 20 } }
}
'

返回地址中包含mill的賬戶

[root@vm2 ~]# curl -X GET "10.1.1.12:9200/bank/_search?pretty" -H 'Content-Type: application/json' -d'
{"query": { "match": { "address": "mill" } }
}
'

返回地址有包含mill或lane的所有賬戶

[root@vm2 ~]# curl -X GET "10.1.1.12:9200/bank/_search?pretty" -H 'Content-Type: application/json' -d'
{"query": { "match": { "address": "mill lane" } }			# 空格就是或的關系
}
'
  • bool

bool must 查詢的字段必須同時存在
查詢包含mill和lane的所有賬戶
?
[root@vm2 ~]# curl -X GET "10.1.1.12:9200/bank/_search?pretty" -H 'Content-Type: application/json' -d'
{"query": {"bool": {"must": [{ "match": { "address": "mill" } },{ "match": { "address": "lane" } }]}}
}
'
?
bool should 查詢的字段僅存在一即可
查詢包含mill或lane的所有賬戶
?
[root@vm2 ~]# curl -X GET "10.1.1.12:9200/bank/_search?pretty" -H 'Content-Type: application/json' -d'
{"query": {"bool": {"should": [{ "match": { "address": "mill" } },{ "match": { "address": "lane" } }]}}
}
'

  • range

    • 指定區間內的數字或者時間

    • 操作符:gt大于,gte大于等于,lt小于,lte小于等于

查詢余額大于或等于20000且小于等于30000的賬戶
?
[root@vm2 ~]# curl -X GET "10.1.1.12:9200/bank/_search?pretty" -H 'Content-Type: application/json' -d'
{"query": {"bool": {"must": { "match_all": {} },"filter": {"range": {"balance": {"gte": 20000,"lte": 30000}}}}}
}
'

elasticsearch-head

elasticsearch-head是集群管理、數據可視化、增刪改查、查詢語句可視化工具。從ES5版本后安裝方式和ES2以上的版本有很大的不同,在ES2中可以直接在bin目錄下執行plugin install xxxx 來進行安裝,但是在ES5中這種安裝方式變了,要想在ES5中安裝Elasticsearch Head必須要安裝NodeJs,然后通過NodeJS來啟動Head。

官網地址:GitHub - mobz/elasticsearch-head: A web front end for an elastic search cluster

elasticsearch-head安裝

第1步: 下載相關軟件并上傳到服務器

官網有安裝說明,可以通過git安裝,也可以下載zip包解壓安裝

下載相應的軟件包,并拷貝到ES集群的一個節點上(我這里拷貝到10.1.1.12這臺,也就是vm2上)

nodejs下載頁面: Download | Node.js

第2步: 安裝nodejs

[root@vm2 ~]# tar xf node-v10.15.0-linux-x64.tar.xz -C /usr/local/
[root@vm2 ~]# mv /usr/local/node-v10.15.0-linux-x64/ /usr/local/nodejs/
[root@vm2 ~]# ls /usr/local/nodejs/bin/npm 
/usr/local/nodejs/bin/npm				確認有此命令
[root@vm2 ~]# ln -s /usr/local/nodejs/bin/npm /bin/npm
[root@vm2 ~]# ln -s /usr/local/nodejs/bin/node /bin/node

第3步: 安裝es-head

安裝方法1(需要網速好):

[root@vm2 ~]# git clone git://github.com/mobz/elasticsearch-head.git
[root@vm2 ~]# cd elasticsearch-head先使用npm安裝grunt
npm(node package manager):node包管理工具,類似yum
Grunt是基于Node.js的項目構建工具
[root@vm2 elasticsearch-head]# npm install -g grunt-cli安裝時間較久,還會在網上下載phantomjs包
[root@vm2 elasticsearch-head]# npm install			

安裝可能有很多錯誤,我這里出現了下面的錯誤(重點是注意紅色的ERR!,黃色的WARN不用管)

解決方法:

[root@vm2 elasticsearch-head]# npm install phantomjs-prebuilt@2.1.16 --ignore-script
此命令執行后不用再返回去執行npm install了,直接開始啟動
?
[root@vm2 elasticsearch-head]# nohup npm run start &

安裝方法二 : (==網速特別慢導致安裝時間過長的話可以嘗試以下方法==)

git clone慢的話就使用下載好的zip壓縮包解壓安裝
[root@vm2 ~]# unzip elasticsearch-head-master.zip -d /usr/local/
[root@vm2 ~]# mv /usr/local/elasticsearch-head-master/ /usr/local/es-head/
[root@vm2 ~]# cd /usr/local/es-head/
[root@vm2 es-head]# npm install -g grunt-cli --registry=http://registry.npm.taobao.org
?
[root@vm2 es-head]# npm install --registry=http://registry.npm.taobao.org
當安裝出現下載phantomjs軟件包特別慢的時候,可以ctrl+c取消,拷貝下載好的phantomjs包到特定位置再重新安裝
[root@vm2 es-head]# cp phantomjs-2.1.1-linux-x86_64.tar.bz2 /tmp/phantomjs/
注意:phantomjs請改成自己的絕對路徑
[root@vm2 es-head]# npm install --registry=http://registry.npm.taobao.org
?
[root@vm2 es-head]# nohup npm run start &

==注意: 運行nohup npm run start &必須要先cd到es-head的目錄==

第4步:瀏覽器訪問

瀏覽器訪問http://es-head節點IP:9100 ,并在下面的地址里把localhost改為es-head節點IP(瀏覽器與es-head不是同一節點就要做)

第5步: 修改ES集群配置文件,并重啟服務

[root@vm1 ~]# cat /etc/elasticsearch/elasticsearch.yml |grep -v "#"
cluster.name: elk-cluster
node.name: 10.1.1.11
node.master: false
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["10.1.1.11", "10.1.1.12"]
http.cors.enabled: true
http.cors.allow-origin: "*"                 加上最后這兩句
?
[root@vm2 ~]# cat /etc/elasticsearch/elasticsearch.yml |grep -v "#"
cluster.name: elk-cluster
node.name: 10.1.1.12
node.master: true
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["10.1.1.11", "10.1.1.12"]
http.cors.enabled: true
http.cors.allow-origin: "*"                 加上最后這兩句
?
[root@vm1 ~]# systemctl restart elasticsearch
[root@vm2 ~]# systemctl restart elasticsearch

第6步: 再次連接就可以看到信息了

新建個索引試試 ???????

刪除此索引

es-head查詢驗證

logstash

logstash簡介

logstash是一個開源的數據采集工具,通過數據源采集數據.然后進行過濾,并自定義格式輸出到目的地。

數據分為:

  1. 結構化數據 如:mysql數據庫里的表等

  2. 半結構化數據 如: xml,yaml,json等

  3. 非結構化數據 如:文檔,圖片,音頻,視頻等

logstash可以采集任何格式的數據,當然我們這里主要是討論采集系統日志,服務日志等日志類型數據。

官方產品介紹:Logstash:收集、解析和轉換日志 | Elastic

input插件: 用于導入日志源 (==配置必須==)

Input plugins | Logstash Reference [8.11] | Elastic

filter插件: 用于過濾(==不是配置必須的==)

Filter plugins | Logstash Reference [8.11] | Elastic

output插件: 用于導出(==配置必須==)

Output plugins | Logstash Reference [8.11] | Elastic

logstash部署

在logstash服務器上確認openjdk安裝

[root@vm3 ~]# java -version
openjdk version "1.8.0_161"
OpenJDK Runtime Environment (build 1.8.0_161-b14)
OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)

在logstash服務器上安裝logstash

[root@vm3 ~]# wget https://artifacts.elastic.co/downloads/logstash/logstash-6.5.2.rpm
[root@vm3 ~]# rpm -ivh logstash-6.5.2.rpm 

配置logstash主配置文件

[root@vm3 ~]# cat /etc/logstash/logstash.yml |grep -v '#' |grep -v '^$'
path.data: /var/lib/logstash
path.config: /etc/logstash/conf.d/					打開注釋,并加上配置目錄路徑
http.host: "10.1.1.13"	打開注釋,并改為本機IP(這是用于xpack監控用,但要收費,所以在這里不配置也可以)
path.logs: /var/log/logstash

啟動測試

[root@vm3 ~]# cd /usr/share/logstash/bin
使用下面的空輸入和空輸出啟動測試一下
[root@vm3 bin]# ./logstash -e 'input {stdin {}} output {stdout {}}'
運行后,輸入字符將被stdout做為標準輸出內容輸出

關閉啟動

測試能啟動成功后,ctrl+c取消,則關閉了

另一種驗證方法:

#上述測試還可以使用如下方法進行:
[root@vm3]# vim /etc/logstash/conf.d/test.confinput {stdin {}
}filter {
}output {stdout {codec => rubydebug				}
}[root@vm3 bin]# pwd
/usr/share/logstash/bin[root@vm3 bin]# ./logstash --path.settings /etc/logstash -f /etc/logstash/conf.d/test.conf -t
......
Config Validation Result: OK. Exiting Logstash--path.settings 指定logstash主配置文件目錄
-f 指定片段配置文件
-t 測試配置文件是否正確
codec => rubydebug這句可寫可不定,默認就是這種輸出方式
[root@vm3 bin]# ./logstash --path.settings /etc/logstash -r -f /etc/logstash/conf.d/test.conf
......haha
{"@timestamp" => 2019-07-02T10:40:10.839Z,"message" => "haha","host" => "vm3.cluster.com","@version" => "1"
}
hehe
{"@timestamp" => 2019-07-02T10:40:11.794Z,"message" => "hehe","host" => "vm3.cluster.com","@version" => "1"
}-r參數很強大,會動態裝載配置文件,也就是說啟動后,可以不用重啟修改配置文件

日志采集

采集messages日志

這里以/var/log/messages為例,只定義input輸入和output輸出,不考慮過濾

[root@vm3 bin]# vim /etc/logstash/conf.d/test.conf
input {file {path => "/var/log/messages"start_position => "beginning"}
}output {elasticsearch{hosts => ["10.1.1.12:9200"]index => "test-%{+YYYY.MM.dd}"}
}[root@vm3 bin]# ./logstash --path.settings /etc/logstash/ -r -f /etc/logstash/conf.d/test.conf  &后臺運行如果要殺掉,請使用pkill java或ps查看PID再kill -9清除

通過瀏覽器訪問es-head驗證

請自行練習驗證:

1, 在logstash那臺服務器上做一些操作(比如,重啟下sshd服務), 讓/var/log/message有新的日志信息,然后驗證es-head里的數據。

結果: 會自動更新, 瀏覽器刷新就能在es-head上看到更新的數據。

2, kill掉logstash進程(相當于關閉), 也做一些操作讓/var/log/message日志有更新,然后再次啟動logstash。

結果: 會自動連上es集群, es-head里也能查看到數據的更新。

采集多日志源

[root@vm3 bin]# vim /etc/logstash/conf.d/test.confinput {file {path => "/var/log/messages"start_position => "beginning"type => "messages"}file {path => "/var/log/yum.log"start_position => "beginning"type => "yum"}
}filter {}output {if [type] == "messages" {elasticsearch {hosts => ["10.1.1.12:9200","10.1.1.11:9200"]index => "messages-%{+YYYY-MM-dd}"}}if [type] == "yum" {elasticsearch {hosts => ["10.1.1.12:9200","10.1.1.11:9200"]index => "yum-%{+YYYY-MM-dd}"}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210151.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210151.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210151.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

藍橋杯日期問題

藍橋杯其他真題點這里&#x1f448; 注意日期合法的判斷 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;public class Main{static int[] days {0,31,28,31,30,31,30,31,31,30,31,30,31};static BufferedReader in new Buf…

【核心重點】Flink四大基石

1. Time&#xff08;時間機制&#xff09; 時間概念 處理時間&#xff1a;執行具體操作時的機器時間&#xff08;例如 Java的 System.currentTimeMillis()) &#xff09;事件時間&#xff1a;數據本身攜帶的時間&#xff0c;事件產生時的時間。攝入時間&#xff1a;數據進入 …

linux vim 基礎設置-自動填充文件頭

前言 當前為vimrc腳本設置&#xff0c;腳本位置在 ~/.vimrc or /etc/vimrc 當前為首次打開 C C Shell 文件&#xff0c;自動填充對應文件頭信息&#xff0c;再次打開時會修改對應時間信息 :set nu "顯示行號 :set hlsearch "搜索時 高亮"新建 .c .cpp .sh文件&a…

理解Go語言中的defer

引言 Go有許多在其他編程語言中可以找到的常見控制流關鍵字,例如if、switch、for等。defer是其他大多數編程語言中沒有的關鍵字,盡管它不太常見,但你很快就會看到它在你的程序中有多么有用。 defer語句的主要用途之一是清理資源,例如打開的文件,網絡連接和數據庫句柄。在…

在AWS Lambda上部署EC2編譯的FFmpeg工具——自定義層的方案

大綱 1 確定Lambda運行時環境1.1 Lambda系統、鏡像、內核版本1.2 運行時1.2.1 Python1.2.2 Java 2 環境準備2.1 創建EC2實例 3 編譯FFmpeg3.1 連接EC2 4 編譯5 上傳S3存儲桶5.1 創建S3桶5.2 創建IAM策略5.3 創建IAM角色5.4 EC2關聯角色5.5 修改桶策略5.6 打包并上傳 6 創建Lamb…

智能優化算法應用:基于海鷗算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼

智能優化算法應用&#xff1a;基于海鷗算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼 文章目錄 智能優化算法應用&#xff1a;基于海鷗算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼1.無線傳感網絡節點模型2.覆蓋數學模型及分析3.海鷗算法4.實驗參數設定5.算法結果6.參考文獻7.MA…

【nuxt3】cannot read preperties of null (reading ‘$nuxt‘)

問題描述 vue3 中&#xff0c;通過 createVNode 創建子組件實例時&#xff0c;發現子組件無法獲取到父組件中的 router、store 信息&#xff0c;一旦子組件使用就會報錯。 問題原因 通過控制臺斷點調試&#xff0c;發現時 appContext 值為空導致的。懷疑是創建子組件的時候&a…

海外地區開啟IPV6無法訪問服務器問題

前言 最近有海外地區的用戶反饋無法訪問公司的網絡&#xff0c;無法下載應用和系統進行升級。了解到瀏覽器可以正常訪問公司域名&#xff0c;谷歌&#xff0c;油管等都能正常使用。日志分析GET請求服務器數據時沒有得到應答&#xff0c;最終查詢網絡相關修改確認與網絡IPV6有關…

掌握游戲開發的全方位知識:這些內容你一定要知道

游戲開發是一項涉及多學科的綜合性工作&#xff0c;從游戲設計到編程、美術、音頻、測試等多個方面都需要開發者具備廣泛的知識。以下是進行游戲開發時需要掌握的主要知識領域。 首先&#xff0c;游戲設計是整個過程的基石。這包括游戲機制和玩法設計、關卡設計、用戶界面&…

表示你的shell未被正確配置以使用conda activate--換成清華源anaconda

1 CommandNotFoundError: Your shell has not been properly configured to use conda activate. If using conda activate from a batch script, change your invocation to CALL conda.bat activate.To initialize your shell, run$ conda init <SHELL_NAME>這個錯誤提…

uniapp-獲取手機型號

要獲取當前設備的手機型號&#xff0c;您可以使用uni-app提供的uni.getSystemInfo() API來實現此目的。 代碼示例&#xff1a; uni.getSystemInfo({success: function(res) {console.log("手機型號&#xff1a;" res.platform)} })該方法會返回一個包含設備信息的…

JFrog推出面向Hugging Face的原生集成,為 ML 模型提供強大支持,實現DevOps、安全和AI的協調統一

2023年12月5日 —— 流式軟件公司、企業軟件供應鏈平臺提供商JFrog推出ML模型管理功能&#xff0c;這是業界首套旨在簡化機器學習&#xff08;ML&#xff09;模型管理和安全性的功能。JFrog 平臺中的全新ML模型管理功能使AI交付與企業現有的 DevOps 和 DevSecOps 實踐保持一致&…

計算機評價的主要性能指標

對計算機評價的主要性能指標如下&#xff1a; 1&#xff0e;時鐘頻率&#xff08;主頻&#xff09; 主頻是計算機的主要性能指標之一&#xff0c;在很大程度上決定了計算機的運算速度。CPU 的工作節拍是由主時鐘來控制的&#xff0c;主時鐘不斷產生固定頻率的時鐘脈沖&#xff…

一個簡單的可視化的A星自動尋路

一個簡單的應用場景&#xff0c;流程圖連線 源碼&#xff1a; addExample("A星路徑查找", function () {return {template: <div><div ref"main"></div></div>,data() { return {}; },computed: {},methods: {},mounted() {var c…

Python中的比較兩個字符串

更多資料獲取 &#x1f4da; 個人網站&#xff1a;ipengtao.com 在Python編程中&#xff0c;字符串比較是一項常見且關鍵的操作&#xff0c;涵蓋了諸多方法和技巧。比較兩個字符串是否相等、大小寫是否一致&#xff0c;或者在一個字符串中尋找特定的子字符串&#xff0c;都是日…

征途漫漫:汽車MCU的國產替代往事

01.西雁東飛&#xff0c;南下創業 1985年&#xff0c;山東大學物理系畢業的周生明加入878廠&#xff08;“北霸天”&#xff09;參與MOS電路研發&#xff0c;隨后幾年&#xff0c;大洋彼岸的英特爾相繼推出CPU 386\486、奔騰系列等產品。在摩爾定律的凸顯、進口和走私的劇烈沖…

基于Java房屋租賃管理系統

基于Java房屋租賃管理系統 功能需求 1、房源信息管理&#xff1a;系統需要能夠記錄和管理所有房源的詳細信息&#xff0c;包括房屋地址、房屋面積、租金、付款方式、房屋類型等。管理員應該可以添加、編輯和刪除房源信息。 2、租戶信息管理&#xff1a;系統需要能夠記錄和管…

class067 二維動態規劃【算法】

class067 二維動態規劃 code1 64. 最小路徑和 // 最小路徑和 // 給定一個包含非負整數的 m x n 網格 grid // 請找出一條從左上角到右下角的路徑&#xff0c;使得路徑上的數字總和為最小。 // 說明&#xff1a;每次只能向下或者向右移動一步。 // 測試鏈接 : https://leetcode…

<JavaEE> 經典設計模式之 -- 線程池

目錄 一、線程池的概念 二、Java 標準庫中的線程池類 2.1 ThreadPoolExecutor 類 2.1.1 corePoolSize 和 maximumPoolSize 2.1.2 keepAliveTime 和 unit 2.1.3 workQueue 2.1.4 threadFactory 2.1.5 handler 2.1.6 創建一個參數自定義的線程池 2.2 Executors 類 2.3…

go學習筆記(17)Blob and ArrayBuffer

最近在學習go websocket的時候&#xff0c;在學習實驗過程遇到一個比較奇怪問題。為什么我的數據返回是blob&#xff0c;而不是arrayBuffer&#xff1f;百思不得其解。 直到同事打包的時候微信小游戲遇到了一個報錯。FileReader不支持。 經過在社區查詢&#xff0c;官方答復是…