架构规划
主机名 | 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了。两种方式 :
- 直接在kibana.yaml中添加
lasticsearch.username 和 elasticsearch.password
- 采用如下方式加密的存储用户名和密码(推荐)
按提示输入用户名密码,我这里写的是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
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)查看结果
如果没有,刷新过来多写入几次测试数据
————————————————————————————————————————————————————