ELK

ElasticSearch 啟動

Starting Elasticsearch

Starting Elasticsearch | Elasticsearch Guide [7.14] | Elastic

Elasticsearch REST Api

喬叔的 Elasticsearch 基礎實務班 (2021.07.24~25) - HackMD

image-1631848723417.png

image-1631848837295.png

Index與type欄位是必要的,id若省去,Elasticsearch
會為document加上自動產生的id。
– 自動產生的id為22字元長、URL-safe、Base64-encoded
string UUID。

【Elasticsearch】容量100%

# 替換 <your_elasticsearch_host> 和 <index_name_pattern> 為實際的 Elasticsearch 主機和索引名稱模式

# 列出所有索引
curl -X GET "http://<your_elasticsearch_host>:9200/_cat/indices?v"

# 删除特定模式的索引(例如,以 "log-" 开头的索引)
curl -X DELETE "http://<your_elasticsearch_host>:9200/<index_name_pattern>"

# 删除所有索引(請謹慎使用)
# curl -X DELETE "http://<your_elasticsearch_host>:9200/*"

Elasticsearch search

關於搜尋

Elastic Stack第七重 - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天 (ithome.com.tw)

【Filebeat】Mac 安裝

 mac 安裝

https://www.elastic.co/guide/en/beats/filebeat/8.7/filebeat-installation-configuration.html#installation

 brew install filebeat
zsh completions have been installed to:
  /usr/local/share/zsh/site-functions

To restart filebeat after an upgrade:
  brew services restart filebeat
Or, if you don't want/need a background service you can just run:
  /usr/local/opt/filebeat/bin/filebeat

【Filebeat】相關連結

 

Elasticsearch 查詢語法

query

查询一级标签
query
    二级标签
    prefix  wildcard
    constant_score
        filter
    prefix  前缀匹配,文档中的词语以搜索的词汇开头
        {field:value}
	term
	    代表完全匹配,即不进行分词器分析,文档中必须包含整个搜索的词汇
	    {field:value}
	match
	    match和term的区别是,match查询的时候,elasticsearch会根据你给定的字段提供合适的分析器,而term查询不会有分析器分析的过程
        match查询相当于模糊匹配,只包含其中一部分关键词就行
	    {field:value}
	match_all   没有参数,查询出来所有
	    {}
	match_phrase    匹配一个短语,给一个短语词,匹配
        {field:value}
    multi_match     匹配多个字段
        {
          "query": {
            "multi_match": {
              "query": "caoke2",
              "fields": [
                "msg",
                "code"
              ]
            }
          }
        }
	range
	    {"age":{"lt":10,"gt":1}}
	-- 以上两级关键字 不能同时使用 多关键字需要用bool
	bool    布尔查询,匹配多个条件,下面的关键字中可以把上面的再嵌套一遍 bool中不能包含range,要用filter包裹
		must should must_not filter
        多个查询条件用数组包裹
highlight   自定义标签的前后缀,fields 里面的字段要是query中查询的字段
    "highlight":{
        "pre_tags":[
          "<aaa>"
        ],
        "post_tags":[
          "</aaa>"
        ],
        "require_field_match":true,
        "fields":{
          "msg":{
            "fragment_size":1000,
            "number_of_fragments":0,
            "fragment_offset":0
          }
        }
      }
from    查询的结果取范围开始
size    查询的结果取范围结束
sort    排序
      "sort": [
        {
          "age": "desc"
        }
      ]
_source     包含or排除字段
    {"includes":["code"],"excludes":[]}
script_fields
aggs    聚合
    "aggregations":{
        "term_agg":{
          "terms":{
            "field":"age",  对字段分组
            "size":10,      返回的条数
            "order":[{   对返回的结果排序,可以多条
                "min_agg":"desc"
            }]
          },
          "aggregations":{  分组后需要统计,可以多个
            "min_agg":{
              "min":{
                "field":"age"
              }
            }
          }
        }
    }

【Kibana】 使用 https

要在本機環境的 Kibana 自產憑證,並讓 Kibana 支援 HTTPS,而非預設的 HTTP,以下是詳細步驟:


🚀 步驟 1:產生自簽名憑證(Self-Signed Certificate)

🔧 使用 OpenSSL 產生憑證:

  1. 開啟終端機,執行以下指令來建立一個新的私鑰和自簽名憑證:
mkdir -p /etc/kibana/ssl
cd /etc/kibana/ssl
# 產生私鑰和自簽名憑證,設定有效期限為 365 天
openssl req -x509 -newkey rsa:4096 -keyout kibana-key.pem -out kibana-cert.pem -days 365 -nodes
# 修改擁有者,權限
chown kibana:kibana kibana-key.pem
chown kibana:kibana kibana-cert.pem
chmod 644 kibana-key.pem
chmod 600 kibana-key.pem

💡 輸入相關資訊:

在執行上述指令時,OpenSSL 會要求輸入一些資訊,像是:

Country Name (2 letter code) [AU]:TW
State or Province Name (full name) [Some-State]:Taipei
Locality Name (eg, city) []:Taipei
Organization Name (eg, company) [Internet Widgits Pty Ltd]:momo.com
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:apielkmonitor.momoshop.com.tw
Email Address []:srou@fmt.com.tw

🎯 產生的檔案:


🚀 步驟 2:配置 Kibana 使用 HTTPS

🔧 編輯 Kibana 的設定檔 kibana.yml

打開 kibana.yml 檔案(通常位於 /etc/kibana/kibana.yml 或你的安裝目錄下),修改以下內容:

# 啟用 SSL
server.ssl.enabled: true

# 設定 SSL 憑證和私鑰的路徑
server.ssl.certificate: /etc/kibana/ssl/kibana-crt.pem
server.ssl.key: /etc/kibana/ssl/kibana-key.pem
# 修改 Kibana 的監聽端口
server.port: 443


# 如果elasticsearch 使用ssl 連線(沒有則不用)
# 選擇驗證證書的方式
elasticsearch.ssl.verificationMode: full
# 這個證書在 Elasticsearch 的 HTTP 證書時已經生成。複製到 Kibana 安裝目錄下配置使用即可。
elasticsearch.ssl.certificateAuthorities: [ "/data/kibana-8.13.0/elasticsearch-ca.pem" ]

⚠️ 注意:將 /path/to/ 替換成你實際的憑證路徑。


🚀 步驟 3:允許本機信任自簽名憑證

🖥️ Mac 或 Linux:

將自簽名憑證 kibana.crt 匯入你的系統信任區:

sudo cp kibana.crt /usr/local/share/ca-certificates/kibana.crt
sudo update-ca-certificates

🖥️ Windows:

  1. 打開 證書管理
  2. 選擇 受信任的根憑證授權單位
  3. 匯入 kibana.crt 檔案。

🚀 步驟 4:重啟 Kibana

sudo systemctl restart kibana

🎯 步驟 5:透過 HTTPS 訪問 Kibana

現在,你可以使用 https://localhost(或指定的 IP 地址)來訪問 Kibana。


錯誤處理:

FATAL  Error: listen EACCES: permission denied 0.0.0.0:443

  1. # 啟動服務錯誤
    sudo systemctl start kibana 
    # 可以使用以下語法查看詳細錯誤
    journalctl -u kibana -f
    
    #如果出現以下錯誤,代表不允許非root人員啟用1024 port 以下服務
    FATAL  Error: listen EACCES: permission denied 0.0.0.0:443
    
    #使用以下語法同意以下檔案綁定使用1024 port 以下服務
    setcap cap_net_bind_service=+epi /usr/share/kibana/bin/kibana
    setcap cap_net_bind_service=+epi /usr/share/kibana/bin/kibana-plugin
    setcap cap_net_bind_service=+epi /usr/share/kibana/bin/kibana-keystore
    # node以實際位置為主
    setcap cap_net_bind_service=+epi /usr/share/kibana/node/glibc-217/bin/node

Error: EACCES: permission denied, open '/run/kibana/kibana.pid'

chown kibana:kibana /run/kibana/kibana.pid 
setcap cap_net_bind_service=+epi /run/kibana/kibana.pid