ELK部署實施

ELK核心組成簡介![]
1.2、核心組成
ELK由Elasticsearch、Logstash和Kibana三部分組件組成;
Elasticsearch是個開源分佈式搜索引擎,它的特點有:分佈式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。
Logstash是一個完全開源的工具,它可以對你的日誌進行收集、分析,並將其存儲供以後使用
kibana 是一個開源和免費的工具,它可以爲 Logstash 和 ElasticSearch 提供的日誌分析友好的 Web 界面,可以幫助您彙總、分析和搜索重要數據日誌。

ELK幫助我們解決了什麼?!
不使用日誌系統需待解決的痛點:
大量不同種類的日誌成爲了運維人員的負擔,不方便管理;
單個日誌文件巨大,無法使用常用的文本工具分析,檢索困難;
日誌分佈在多臺不同的服務器上,業務一旦出現故障,需要一臺臺查看日誌。
線上日誌出現報錯無法第一時間知悉並處理。
必須給核心開發人員開通線上服務器賬號,對生產環境風險上升。
運維對線上環境不可控。
不能滿足信息安全等級保護三級對日誌存儲的要求。
不能滿足日誌可視化和大數據量分析要求。

系統優化

cat /etc/security/limits.conf
注:soft 指的是當前系統生效的設置值。hard 表明系統中所能設定的最大值

    • nofile 65536 #配置root用戶生效參數#
      ###修改文件描述符大小(程序裏面需要打開多個文件調整參數)####
      deploy hard nofile 165536 #單個用戶可用的最大進程數量(硬限制)
      deploy soft nofile 165536 #單個用戶可用的最大進程數量(軟限制) #
      ######鎖定內存,拒絕 swapping####
      deploy soft memlock unlimited
      deploy hard memlock unlimited
      deploy soft nproc 165536 #可打開的文件描述符的最大數(軟限制)#
      deploy hard nproc 165536 #可打開的文件描述符的最大數(硬限制)

ES配置文件說明
elasticsearch配置文件說明
grep -v ^# config/elasticsearch.yml
cluster.name: AB #配置es的集羣名稱
node.name: node-1 #配置節點名
node.master: true #是否可以成爲master
path.data: /app/es/data #設置索引數據的存儲路徑
path.logs: /app/es/logs #設置日誌文件的存儲路徑
bootstrap.memory_lock: true #設置爲true來鎖住內存。因爲如不鎖定內存,當jvm開始swapping時es的效率會降低
bootstrap.system_call_filter: false
network.host: 10.10.40.22 #指定主機地址
http.port: 9200 #設置對外服務的http端口
discovery.zen.ping.unicast.hosts: ["10.10.40.22", "10.10.40.23"] #集羣中的主節點的初始列表
discovery.zen.minimum_master_nodes: 2

啓動filebeat收集haproxy訪問日誌
前端web服務器日誌收集也可用filebeat
[root@testweb ~]# grep -v "^#" /app/filebeat-5.3.1-linux-x86_64/filebeat.yml
filebeat.prospectors:

  • input_type: log
    Paths that should be crawled and fetched. Glob based paths.
    paths:

    • /var/log/haproxy/haproxy.log
      document_type: haproxyacclog
  • input_type: log
    paths:

    • /var/log/dmesg
      document_type: dmesg
      output.kafka:
      #enabled: true
      hosts: ["10.10.40.25:9092", "10.10.40.22:9092"]
      topics:
      • topic: '%{[type]}'
        use_type: true
        partition.round_robin:
        reachable_only: false
        required_acks: 1
        compression: gzip
        max_message_bytes: 1000000
         
         啓動方式:
        nohup /app/filebeat-5.3.1-linux-x86_64/filebeat -e -c filebeat.yml > /dev/null 2>&1 &

Kafka配置文件解讀
broker.id=1 #id,必須是數字 必須是唯一值#
port=9092 #broker監聽的端口#
host.name=10.10.40.22 #唯一值,此處填服務器IP
num.network.threads=3 #接收消息的線程數,會將接收到的消息放到內存中,然後再從內存中寫入磁盤#
num.io.threads=8 #消息從內存中寫入磁盤是時候使用的線程數量,用來處理磁盤IO的線程數量#
socket.send.buffer.bytes=102400 #發送套接字的緩衝區大小
socket.receive.buffer.bytes=102400 #接受套接字的緩衝區大小
socket.request.max.bytes=104857600 #請求套接字的緩衝區大小
log.dirs=/app/kafka/logs #定義log目錄,啓動時自動會創建#
num.partitions=16 #需要配置較大、分片影響讀寫速度#
num.recovery.threads.per.data.dir=1 #segment文件默認會被保留7天的時間,超時的話就會被清理,那麼清理這件事情就需要有一些線程來做。這裏就是用來設置恢復和清理data下數據的線程數量#
log.retention.hours=168 # segment文件保留的最長時間,默認保留7天(168小時)#
log.segment.bytes=1073741824 #日誌文件中每個segment的大小,默認爲1G
log.retention.check.interval.ms=300000 #上面的參數設置了每一個segment文件的大小是1G,那麼就需要有一個東西去定期檢查segment文件有沒有達到1G,多長時間去檢查一次,就需要設置一個週期性檢查文件大小的時間(單位是毫秒)。
zookeeper.connect=10.10.40.22:2181,10.10.40.25:2181 #zookpeeper連接的ip和端口#
zookeeper.connection.timeout.ms=6000 #zookpeeper連接超時設置#
kafka查看所有topic

/app/kafka/bin/kafka-topics.sh --list --zookeeper 10.10.40.25:2181,10.10.40.22:2181 #查看集羣中所有的主題topic名

Elastalert介紹**
Elastalert是Yelp公司用python2寫的一個報警框架(目前支持python2.7,不支持3.x),github地址爲 https://github.com/Yelp/elastalert

Elastalert配置文件
[root@ceshiELK1 elastalert]# grep -v "^#" example_rules/example_frequency.yaml
es_host: 10.10.40.23
es_port: 9200
name: server is error message
type: frequency 
index: w0-apache-acclog-* 
num_events: 1 
timeframe:
hours: 4
filter:
query:
query_string:
query: "ERROR"
smtp_host: smtp.qiye.sina.com
smtp_port: 25
smtp_auth_file: smtp_auth_file.yaml
email_reply_to: [email protected]
from_addr: [email protected]
alert:
"email"
email:
"[email protected]"

配置kibana權限細分
10.10.40.22
10.10.40.23
 
兩臺機器安裝ssl
cd /app/elasticsearch/bin/
./plugin install -b com.floragunn/search-guard-2/2.4.4.10
./plugin install -b com.floragunn/search-guard-ssl/2.4.4.19

配置文件定義證書信息
[deploy@test-apache example-pki-scripts]$ vim /app/elasticsearch/config/elasticsearch.yml
#配置elasticsearch 各結點基於tls加密通訊#
searchguard.ssl.transport.keystore_filepath: node-1-keystore.jks
searchguard.ssl.transport.keystore_password: changeit
searchguard.ssl.transport.truststore_filepath: truststore.jks
searchguard.ssl.transport.truststore_password: changeit
searchguard.ssl.transport.enforce_hostname_verification: false
##初始化 Search Guard 索引,配置帳號#配置一定要和籤的客戶端證書一致
searchguard.authcz.admin_dn:

  • "CN=application, OU=client, O=client, L=Test, C=DE"
     ##配置REST-API 基於https連接##
    searchguard.ssl.http.enabled: true
    searchguard.ssl.http.keystore_filepath: node-1-keystore.jks
    searchguard.ssl.http.keystore_password: changeit
    searchguard.ssl.http.truststore_filepath: truststore.jks
    searchguard.ssl.http.truststore_password: changeit

重新加載search-guard配置文件
[deploy@test-apache search-guard-2]$ tools/sgadmin.sh -ts /app/es/config/truststore.jks -tspass changeit -ks sgconfig/AB-keystore.jks -kspass changeit -cd sgconfig/ -icl -nhnv -h 10.10.40.23

通過search-guard的hash工具將密碼加密
則先用plugins/search-guard-2/tools/hash.sh生成hash字符串,生成密碼: 
先修改權限。再生成密碼。
[deploy@ceshiELK2 search-guard-2]$ chmod +x tools/*
[deploy@ceshiELK2 search-guard-2]$ ./tools/hash.sh -p fdajkfdslfdsa
注:密碼不能用$這種特殊符號
$2a$12$k7uQePTOpDvTfZdKBlNjnOVDYawe/MRMGHP1CIb7qDg6jRTtpsfWm

search-guard中的用戶權限管理
1、sg_config.yml:主配置文件不需要做改動。
2、sg_internal_users.yml:本地用戶文件,定義用戶密碼以及對應的權限。
3、sg_roles.yml:權限配置文件
4、sg_roles_mapping.yml:定義用戶的映射關係
5、sg_action_groups.yml:定義權限

Logstash使用https加密傳輸數據到ES

通過kafka將數據傳送到es

[deploy@kafka1 logs]$ cat /app/logstash/conf/nginx2-access.conf
input {
kafka {
zk_connect => "10.10.40.25:2181,10.10.40.22:2181" #消費者們
topic_id => "nginx2-accesslog"
codec => "json"
consumer_threads => 1
type => "nginx2-accesslog"
}
}
output {
if [type] == "nginx2-accesslog" {
elasticsearch {
hosts => ["10.10.40.22:9200","10.10.40.23:9200"]
codec => "json"
user => "admin"
password => "abc1g%1234"
ssl => true
ssl_certificate_verification => false
truststore => "/app/logstash/truststore.jks"
truststore_password => changeit
index => "nginx2-accesslog-%{+YYYY.MM.dd}"
}
}
}

最終實現效果
Kibana無權限項目將無法打開
ELK部署實施

ELK知識點總結

ELK部署實施

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章