ELFK搭建

架构规划

主机名 IP 角色
k8s-01 192.168.2.112 logstash-01,filebeat
k8s-02 192.168.2.113 logstash-02,filebeat
k8s-03 192.168.2.114 es-01
k8s-04 192.168.2.115 es-02
k8s-05 192.168.2.116 es-03,kibana

包准备:

  • elasticsearch-6.8.6.tar.gz
  • filebeat-7.5.0-linux-x86_64.tar.gz
  • kafka_2.12-3.4.0.tgz
  • kibana-6.8.6-linux-x86_64.tar.gz
  • logstash-6.8.6.zip

环境准备:

1. 环境需要jdk1.8支持

a)解压jdk.tar.gz tar zxvf jdk-8u144-linux-x64.tar.gz -C /opt/

b)vim /etc/profile 最后加入

export JAVA_HOME=/opt/jdk1.8.0_144

PATH=$JAVA_HOME/bin:$PATH:$HOME/.local/bin:$HOME/bin

export PATH

source /etc/profile && java -version

2. 系统参数优化

a) 编辑/etc/security/limits.conf 新增:

* soft nofile 65535
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096

b) 编辑/etc/sysctl.conf 加入vm.max_map_count=655360

实施过程:

一.搭建ES集群

1.1)解压es包 -创建es专属用户-创建es数据相关目录-修改属主属组

解压略
mv elasticsearch-6.8.6/ elasticsearch
mkdir -p /opt/es/data log
useradd  elasticsearch
chown -R elasticsearch.elasticsearch elasticsearch
chown -R elasticsearch.elasticsearch /opt/data/es

注意: 测试环境机器配置很低 ,所以修改一下config/jvm.options 将默认数值改成-Xms256m -Xmx256m

1.2) 编辑es配置文件elasticsearch.yml

cluster.name: es-cluster-ty
node.name: node-1
node.master: true
node.data: true
path.data: /opt/data/es/data/
path.logs: /opt/data/es/log/
network.host: 192.168.2.114
http.port: 9200
transport.tcp.port: 9300
discovery.zen.ping.unicast.hosts: ["192.168.2.114:9300", "192.168.2.115:9300", "192.168.2.116:9300"]
discovery.zen.minimum_master_nodes: 2

1.3) 编辑es-服务文件/lib/systemd/system/elasticsearch.service

[Unit]                                                       
Description=Elasticsearch fot ty                      
Documentation=http://www.elastic.co                            
Wants=network-online.target                                   
After=network-online.target                                        
                              
[Service]            
RuntimeDirectory=elasticsearch
PrivateTmp=true                                                                  
Environment=ES_HOME=/opt/elasticsearch
Environment=ES_PATH_CONF=/opt/elasticsearch/config
Environment=PID_DIR=/opt/elasticsearch 
EnvironmentFile=-/etc/default/elasticsearch
                                          
WorkingDirectory=/opt/elasticsearch
User=elasticsearch
Group=elasticsearch
ExecStart=/opt/elasticsearch/bin/elasticsearch -p ${PID_DIR}/elasticsearch.pid --quiet
StandardOutput=journal
StandardError=inherit
LimitNOFILE=65536
LimitNPROC=4096
LimitAS=infinity
LimitFSIZE=infinity
TimeoutStopSec=0
KillSignal=SIGTERM
KillMode=process
SendSIGKILL=no
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target

1.4) 开启服务 并开启自启动

systemctl enable elasticsearch.service 
systemctl start  elasticsearch.service 

1.5) 集群测试

# curl -i -XGET http://127.0.0.1:9200/_cluster/health?pretty

HTTP/1.1 200 OK
content-type: application/json; charset=UTF-8
content-length: 466

{
  "cluster_name" : "es-cluster-ty",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 3,
  "number_of_data_nodes" : 3,
  "active_primary_shards" : 0,
  "active_shards" : 0,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}

————————————————————————————————————————————————————

二.搭建Logstash

1.1)解压程序

unzip logstash-6.8.6.zip
mv logstash-6.8.6 logstash

1.2)修改启动配置 /opt/logstash/config/startup.options为如下内容(路径按需修改):

JAVACMD=/opt/jdk1.8.0_144/bin/java
JAVA_HOME=/opt/jdk1.8.0_144
LS_HOME=/opt/logstash
LS_SETTINGS_DIR=/opt/logstash/config
LS_CONFIG_FILE=/opt/logstash/config/logstash.conf
LS_OPTS="--path.settings ${LS_SETTINGS_DIR} --path.config ${LS_CONFIG_FILE}"
LS_JAVA_OPTS=""
LS_PIDFILE=/var/run/logstash.pid
LS_USER=logstash
LS_GROUP=logstash
LS_GC_LOG_FILE=/opt/logstash/logs/gc.log
LS_OPEN_FILES=16384
LS_NICE=19
SERVICE_NAME="logstash"
SERVICE_DESCRIPTION="logstash"
  • 字段解读:
JAVACMD:java程序的路径。
===============================================================
JAVA_HOME: 单独的 JAVACMD 变量有时不能生效,添加 JAVA_HOME 备用。这里配置成你的JDK路径
===============================================================
LS_HOME: logstash 的安装目录
===============================================================
LS_SETTINGS_DIR: logstash 的配置文件目录,这个目录中要包含 logstash.yml
===============================================================
LS_CONFIG_FILE: 指定 logstash.conf 配置文件
===============================================================
LS_OPTS: 在运行 logstash 时添加的参数。这里配置成: "--path.settings ${LS_SETTINGS_DIR} --path.config 
${LS_CONFIG_FILE}"
===============================================================
LS_GC_LOG_FILE: gc 日志路径
===============================================================

1.3)添加logstash用户

addgroup logstash
useradd -M -d /opt/logstash/ -s /bin/bash -g logstash logstash
chown -R logstash.logstash /opt/logstash

1.4) 利用上面修改的启动配置自动生成systemd服务

/opt/logstash/bin/system-install /opt/logstash/config/startup.options
systemctl daemon-reload
systemctl enable logstash
systemctl start logstash
systemctl status logstash

1.5) 安装drop插件
注: 在使用logstash中,我们可能会在配置文件中用drop{}块来过滤一些不必要的东西,所以使用drop要安装插件才能使用。我们提前安装上

su - logstash
logstash-plugin install logstash-filter-drop

1.6) 添加一个logstash配置/opt/logstash/config/logstash.conf
暂时略过,后面集中配置组件的配置

———————————————————————————————————————————————————

三.安装Filebeat

1.1) 安装程序

tar xf filebeat-oss-7.5.0-linux-x86_64.tar.gz -C /opt/
mv /opt/filebeat-7.5.0-linux-x86_64/  /opt/filebeat

1.2) 加入系统服务/lib/systemd/system/filebeat.service

[Unit]
Description=filebeat

[Service]
Type=simple
# User=beats
# Group=beats
User=root
Group=root
# Load env vars from /etc/default/ and /etc/sysconfig/ if they exist.
# Prefixing the path with '-' makes it try to load, but if the file doesn't
# exist, it continues onward.
EnvironmentFile=-/etc/default/filebeat
EnvironmentFile=-/etc/sysconfig/filebeat
ExecStart=/opt/filebeat/filebeat -e -c /opt/filebeat/filebeat.yml -d "publish"
Restart=always
WorkingDirectory=/opt/filebeat

[Install]
WantedBy=multi-user.target

1.3) 启动服务

systemctl daemon-reload 
systemctl enable filebeat 
systemctl start filebeat.service 
systemctl status  filebeat.service 

1.4) 配置文件

暂时略过

————————————————————————————————————————————————————

四.安装Kibana

1.1) 安装程序 并 创建Kibana用户

tar zxzvf kibana-6.8.6-linux-x86_64.tar.gz -C /opt/
mv /opt/kibana-6.8.6-linux-x86_64 /opt/kibana

userdd kibana
chown -R kibana.kibana /opt/kibana

1.2) 修改kibana配置文件/opt/kibana/config/kibana.yml

server.port: 5601
server.host: "192.168.2.116"
elasticsearch.hosts: ["http://192.168.2.114:9200","http://192.168.2.115:9200","http://192.168.2.116:9200"]

1.3) 配置系统服务/lib/systemd/system/kibana.service

[Unit]
Description=Kibana
StartLimitIntervalSec=30
StartLimitBurst=3

[Service]
Type=simple
User=kibana
Group=kibana
# Load env vars from /etc/default/ and /etc/sysconfig/ if they exist.
# Prefixing the path with '-' makes it try to load, but if the file doesn't
# exist, it continues onward.
EnvironmentFile=-/etc/default/kibana
EnvironmentFile=-/etc/sysconfig/kibana
ExecStart=/opt/kibana/bin/kibana "-c /opt/kibana/config/kibana.yml"
Restart=always
WorkingDirectory=/opt/kibana

[Install]
WantedBy=multi-user.target

1.4)启动服务

systemctl daemon-reload 
systemctl start kibana.service 
systemctl enable  kibana.service 

临时测试curl -I 192.168.2.116:5601


ES,Kibana细节优化

主要包括ES节点间通过tls证书访问,es启用 xpack 的安全性功能,权限控制,kibana通过账户密码登录

一.配置支持权限

  • 开启xpack的安全性功能
echo "xpack.security.enabled: true">>/opt/elasticsearch/config/elasticsearch.yml

二.配置ES节点之间使用TSL通信

2.1) 为每个节点生成证书(使用es自带的工具创建CA)【只在其中一台es节点执行即可】
注意:使用 ES 运行时使用的用户创建,这样生成出文件的权限是正确的。本机上的 elasticsearch 用户不能登录或用 su 命令切换,所以用 sudo 直接以这个用户执行命令,执行时先添加JAVA环境变量

cd  /opt/elasticsearch
sudo -u elasticsearch JAVA_HOME=/opt/jdk1.8.0_144 bin/elasticsearch-certutil ca
# 运行时生成文件名就用默认,密钥不进行配置。
# 生产完成后在当前路径会出现文件 elastic-stack-ca.p12

2.2) 为集群中每个节点生成证书和秘钥【仍在上一步的es节点执行即可】

sudo -u elasticsearch JAVA_HOME=/opt/jdk1.8.0_144 bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12

注意:在执行过程中依次需要输入 ca的密码(上一步中没有进行设置,为空) 证书路径(默认) 证书密码(不设置,为空)
完成后当前路径会生成文件 elastic-certificates.p12;这个过程中并没有指定使用证书节点的主机名、 dns 和 IP地址。也就是说所有使用这个证书的节点都可以加入集群,这里所有节点就都使用这一个证书了。

2.3) es集群所有节点都创建一个保存证书的目录,将刚生成的证书分发至这个目录保存

mkdir /opt/elasticsearch/config/certs
scp -p elastic-certificates.p12 es-02://opt/elasticsearch/config/certs/
scp -p elastic-certificates.p12 es-03://opt/elasticsearch/config/certs/

2.4)配置节点间tsl通信 【所有es节点操作】
编辑elasticsearch.yml文件中添加:

xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /opt/elasticsearch/config/certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /opt/elasticsearch/config/certs/elastic-certificates.p12

重启服务。(如果起不来,排查一下所有es节点的certs目录属主属组是否为elasticsearch)

三. 配置ES集群的内置用户密码

为了安全起见,我们在上面已经开启了安全权限功能,现在我们为集群默认的内置用户配置密码。
(默认的内置用户:elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user)

sudo -u elasticsearch JAVA_HOME=/opt/jdk1.8.0_144 bin/elasticsearch-setup-passwords auto

按照提示,将自动生成随机密码,密码自己要记录保存好。注意:配置时需要保持集群是启动状态。

四.Kibana配置使用账号密码访问

上面在es已经开启了xpack的安全权限功能后,已经配置了es内置用户的账号密码。现在kibana需要使用账号密码来连接es了。两种方式 :

  1. 直接在kibana.yaml中添加lasticsearch.username 和 elasticsearch.password
  2. 采用如下方式加密的存储用户名和密码(推荐)
    按提示输入用户名密码,我这里写的是es内置用户kibana和上面生成的随机密码
cd /opt/kibana
sudo -u kibana  JAVA_HOME=/opt/jdk1.8.0_144 bin/kibana-keystore create
sudo -u kibana  JAVA_HOME=/opt/jdk1.8.0_144 bin/kibana-keystore add elasticsearch.username
sudo -u kibana  JAVA_HOME=/opt/jdk1.8.0_144 bin/kibana-keystore add elasticsearch.password

重启服务systemctl restart kibana.service
再次打开kibana界面,使用kibana账户登录也可以使用自己创建的账户也可以,包括之前设置过密码的所有es内置账户(elastic为超级管理员)


ELFK简单配置

前面只搭建了环境ELFK的环境,我们现在简单配置一下实现elfk的联通性

1. filebeat配置filebeat.yml

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /opt/f.log
  fields:
    log_type: access

output.logstash:
  enabled: true
  hosts: ["192.168.2.113:5044"]

2. logstash配置logstash.conf

input {
    beats {
        port => 5044
    }
}

filter {
     kv {
        field_split => "&?"
     } 
}

output {
    elasticsearch {
        hosts => ["http://192.168.2.114:9200","http://192.168.2.115:9200","http://192.168.2.116:9200"]
        index => "%{[@metadata][search]}-%{+YYYY.MM.dd}"
        document_type => "%{[@metadata][type]}"
        user => "logstash_server"
        password => "123456"
    }
}

3. kibana创建一个logstash_server用户并分配角色权限

用于Logstash连接es时使用

3.1)创建logstash_server的role

image.png

3.2)创建logstash_server的用户


4. 写入测试数据,在kibana上显示。

4.1)kibana上创建一个Index Patterns

4.2)写入测试数据

echo "www.baidu.com?id=2&name=123&age=30">>/opt/f.log

4.3)查看结果
如果没有,刷新过来多写入几次测试数据



————————————————————————————————————————————————————

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容