ELK 7.9.3 集群部署

一、ELK介绍
ELK 是三个开源软件的缩写,提供一套完整的企业级日志平台解决方案。
分别是:
• Elasticsearch:搜索、分析和存储数据
• Logstash :采集日志、格式化、过滤,最后将数据推送到Elasticsearch存储
• Kibana:数据可视化
• Beats :集合了多种单一用途数据采集器,用于实现从边缘机器向 Logstash 和
Elasticsearch 发送数据。里面应用最多的是Filebeat,是一个轻量级日志采集器。

二、ELK架构图
在这里插入图片描述
三、Elasticsearch
Elasticsearch(简称ES)是一个分布式、RESTful 风格的搜索和数据分析引擎,
用于集中存储日志数据。
Elasticsearch术语:
• Index:索引是多个文档的集合
• Document:Index里每条记录称为Document,若干文档构建一个Index
• Type:一个Index可以定义一种或多种类型,将Document逻辑分组
• Field:ES存储的最小单元
四、Elasticsearch 服务部署

下载地址:https://www.elastic.co/cn/downloads/elasticsearch
支持多种部署方式:
• 二进制包
• yum
• rpm
• docker

4.1、本文以二进制方式部署 Elasticsearch 服务

cd /opt/elk
tar zxvf elasticsearch-7.9.3-linux-x86_64.tar.gz 
mv elasticsearch-7.9.3 elasticsearch
useradd es # 出于安全考虑,默认不能用root账号启动
chown -R es:es elasticsearch

4.2、启动先决条件(修改服务器参数)

启动先决条件:
• 调整进程最大打开文件数数量
# 临时设置
ulimit -n 65535
# 永久设置,重启生效
vi /etc/security/limits.conf
* hard nofile 65535
* soft nofile 65535
• 调整进程最大虚拟内存区域数量
# 临时设置
sysctl -w vm.max_map_count=262144
# 永久设置
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
sysctl -p
• 配置集群环境

4.3、Elasticsearch master节点配置如下

# vim config/elasticsearch.yml
cluster.name: elk-cluster # 集群名称
node.name: node-1 # 集群节点名称
#path.data: /path/to/data # 数据目录
#path.logs: /path/to/logs # 日志目录
network.host: 0.0.0.0 # 监听地址
http.port: 9200 # 监听端口
# transport.tcp.port: 9300 #内部节点之间通信端口
discovery.seed_hosts: [“192.168.31.61”, “192.168.31.62”,“192.168.31.63”] # 集群节点列表
cluster.initial_master_nodes: [“node-1”] # 首次启动指定的Master节点

4.4、Elasticsearch node1 节点配置如下

# vim config/elasticsearch.yml
cluster.name: elk-cluster # 集群名称
node.name: node-1 # 集群节点名称
#path.data: /path/to/data # 数据目录
#path.logs: /path/to/logs # 日志目录
network.host: 0.0.0.0 # 监听地址
http.port: 9200 # 监听端口
# transport.tcp.port: 9300 #内部节点之间通信端口
discovery.seed_hosts: [“192.168.1.100”, “192.168.1.101”,“192.168.1.102”] # 集群节点列表
# cluster.initial_master_nodes: [“node-1”] # 首次启动指定的Master节点 
# node1和node2 不启用此参数,将其注释即可

4.5、Elasticsearch node2 节点配置如下

# vim config/elasticsearch.yml
cluster.name: elk-cluster # 集群名称
node.name: node-1 # 集群节点名称
#path.data: /path/to/data # 数据目录
#path.logs: /path/to/logs # 日志目录
network.host: 0.0.0.0 # 监听地址
http.port: 9200 # 监听端口
# transport.tcp.port: 9300 #内部节点之间通信端口
discovery.seed_hosts: [“192.168.1.100”, “192.168.1.101”,“192.168.1.102”] # 集群节点列表
# cluster.initial_master_nodes: [“node-1”] # 首次启动指定的Master节点 
# node1和node2 不启用此参数,将其注释即可

4.6、配置系统服务管理

# cat /usr/lib/systemd/system/elasticsearch.service 
[Unit]
Description=elasticsearch
[Service]
User=es
LimitNOFILE=65535
ExecStart=/opt/elk/elasticsearch/bin/elasticsearch
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target


# systemctl daemon-reload 
# systemctl start elasticsearch
# systemctl start elasticsearch
# 说明:三个节点相同配置即可

4.7、检查 Elasticsearch 服务是否正常

查看集群节点:curl -XGET 'http://127.0.0.1:9200/_cat/nodes?pretty'
查询集群状态: curl -i -XGET http://127.0.0.1:9200/_cluster/health?pretty

五、Logstash 服务部署
5.1、Logstash 介绍
Logstash能够将采集日志、格式化、过滤,最后将数据推送到Elasticsearch存储。
在这里插入图片描述
Input:输入,输入数据可以是Stdin、File、TCP、Redis、Syslog等。
Filter:过滤,将日志格式化。有丰富的过滤插件:Grok正则捕获、Date时间处理、Json编解码、Mutate数据修改等。
Output:输出,输出目标可以是Stdout、File、TCP、Redis、ES等。

5.2、Logstash 部署
5.2.1、本文采用二进制方式部署Logstash

# https://www.elastic.co/cn/downloads/past-releases#logstash   # logstash 下载地址
yum install java-1.8.0-openjdk –y
cd /opt/elk
tar zxvf logstash-7.9.3.tar.gz
mv logstash-7.9.3 logstash

5.3、Logstash 配置文件

# vim config/logstash.yml
pipeline: # 管道配置
batch: 
size: 125 
delay: 5
path.config: /opt/elk/logstash/conf.d # conf.d目录自己创建
# 定期检查配置是否修改,并重新加载管道。也可以使用SIGHUP信号手动触发
# config.reload.automatic: false
# config.reload.interval: 3s
# http.enabled: true
http.host: 0.0.0.0
http.port: 9600-9700
log.level: info
path.logs: /opt/elk/logstash/logs

5.4、配置系统启动Logstash服务

# vi /usr/lib/systemd/system/logstash.service 
[Unit]
Description=logstash
[Service]
ExecStart=/opt/elk/logstash/bin/logstash
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target

六、Logstash 基本使用
6.1、示例:从标准输入获取日志并打印到标准输出

# logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}'
hello world 
{
"@version" => "1",
"message" => "hello world ",
"@timestamp" => 2020-11-05T09:23:44.025Z,
"host" => "localhost"
}

说明:
默认给日志加的三个字段:
• “@timestamp” 标记事件发生的时间点
•“host” 标记事件发生的主机
•“type” 标记事件的唯一类型

命令行参数:
• -e 字符串形式写配置
• -f 指定配置文件
• -t 测试配置文件语法

6.2、输入插件(Input)

输入阶段:从哪里获取日志
常用插件:
• Stdin(一般用于调试)
• File
• Redis
• Beats(例如filebeat)

6.3、输入插件:File

File插件:用于读取指定日志文件
常用字段:
• path 日志文件路径,可以使用通配符
• exclude 排除采集的日志文件
• start_position 指定日志文件什么位置开始读,默认从结尾
开始,指定beginning表示从头开始读

6.3.1、示例1:读取日志文件并输出到文件

input {
file {
path => "/var/log/test/*.log"
exclude => "error.log"
start_position => "beginning"
    }
}
filter {
}
output {
file {
path => "/tmp/test.log"
     }
}

6.3.2、示例2:配置日志来源

input {
file {
path => "/var/log/test/*.log"
exclude => "error.log"
start_position => "beginning"
tags => "web"
tags => "nginx"
type => "access"
add_field => {
"project" => "microservice"
"app" => "product"
    }
  }
}

6.4、输入插件:Beats
Beats插件:接收来自Beats数据采集器发来的数据,例如Filebeat
常用字段:
• host 监听地址
• port 监听端口

6.4.1、示例

input {
beats {
host => "0.0.0.0"
port => 5044
}
}
filter {
}
output {
file {
path => "/tmp/test.log"
}
}

6.5、过滤插件:JSON
JSON插件:接收一个json数据,将其展开为Logstash事件中的
数据结构,放到事件顶层。
常用字段:
• source 指定要解析的字段,一般是原始消息message字段
• target 将解析的结果放到指定字段,如果不指定,默认在
事件的顶层

6.5.1、模拟数据

{"remote_addr": "192.168.1.100","url":"/index","status":"200"}
示例:解析HTTP请求
input {
file {
path => "/var/log/test/*.log"
}
}
filter {
json {
source => "message"
}
}
output {
file {
path => "/tmp/test.log"
}
}

6.6、输出插件(Output)
输出阶段:将处理完成的日志推送到远程数据库存储
常用插件:
• file
• Elasticsearch

6.7、输入插件:Elasticsearch
Elasticsearch插件:将数据推送到ES存储。
常用字段:
• hosts 指定ES主机地址
• index 指定写入的ES索引名称,一般按日期ec 划分
6.7.1、示例

output {
elasticsearch {
hosts => 
["192.168.1.100:9200","192.168.1.101:9200","192.168.1.102:9200"]
index => "microservice-product-%{+YYYY.MM.dd}"
}
}

6.8、条件判断
操作符:

  • 比较操作符:==,!= , < , > , <= ,>=
  • 正则匹配操作符:=~(匹配正则) ,!~(不匹配正则)
  • 成员操作符:in(包含) , not in(不包含)
  • 逻辑操作符:and(与),or(或), nand(非与) , xor(非或)
  • 一元运算符:!(取反) ,()(复合表达式) ,!()(对复合表达式结果取反)

6.8.1、条件判断语句

if <表达式> {
<语句>
} else if <表达式> {
<语句>
} else {
<语句>
}

6.8.2、示例

input {
file {
path => "/var/log/test/test.log"
add_field => {
"log_type" => "test"
}
}
file {
path => "/var/log/test/prod.log"
add_field => {
"log_type" => "prod"
}
}
}
filter {
if [log_type] in ["test","dev"] {
mutate { 
add_field => { 
"[@metadata][target_index]" => "test-%{+YYYY.MM}" 
} 
}
} else if [log_type] == "production" {
mutate { 
add_field => { 
"[@metadata][target_index]" => "prod-%{+YYYY.MM.dd}" 
} 
}
} else {
mutate { 
add_field => { 
"[@metadata][target_index]" => "unknown-%{+YYYY}" 
} 
}
}
}
output {
elasticsearch {
hosts => "192.168.1.100:9200"
index => "%{[@metadata][target_index]}"
}
}

七、Kibana服务部署
7.1、Kibana介绍
Kibana 是一个图形页面系统,用于对 Elasticsearch 数据可视化。

7.2、Kibana 部署
7.2.1、本文采用二进制方式部署

cd /opt/elk
tar zxvf kibana-7.9.3-linux-x86_64.tar.gz
mv kibana-7.9.3-linux-x86_64 kibana
# vi config/kibana.yml 
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://192.168.1.100:9200"]
i18n.locale: "zh-CN"

7.3、配置系统服务管理:

# vi /usr/lib/systemd/system/kibana.service
[Unit]
Description=kibana
[Service]
ExecStart=/opt/elk/kibana/bin/kibana --allow-root
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target

八、Filebeat 服务部署
8.1、本文采用RPM安装方式

rpm -ivh filebeat-7.9.3-x86_64.rpm

在这里插入图片描述
8.2、配置采集指定日志

# vi /etc/filebeat/filebeat.yml
# 配置不同的输入
- type: log
# 是否启用该输入配置
enabled: false
# 采集的日志文件路径,可以通配
paths:
- /var/log/*.log
# 正则匹配要排除的行,这里以DBG开头的行都过滤掉
#exclude_lines: ['^DBG']
# 正则匹配要采集的行,这里以ERR/WARN开头的行都采集
#include_lines: ['^ERR', '^WARN']
# 排除的文件,默认采集所有
#exclude_files: ['.gz$']
# 添加标签
#tags: ["nginx"]
# 下面fields添加的字段默认是在fields.xxx,可以设置在顶级对象下
# fields_under_root: true
# 自定义添加的字段,一般用于标记日志来源
#fields:
# level: debug
# review: 1

8.2.1、示例

filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/test/*.log
tags: ["nginx"]
fields_under_root: true
fields:
project: microservice
app: product

8.3、推送到Logstash或ES

推送到Logstash:
output.logstash:
hosts: ["192.168.1.102:5044"]

推送到ES:
setup.ilm.enabled: false
setup.template.name: "microservice-product"
setup.template.pattern: "microservice-product-*"
output.elasticsearch:
hosts: ["localhost:9200"]
index: "microservice-product-%{+yyyy.MM.dd}"

九、增加数据缓冲队列
9.1、安装redis

yum install redis
bind 0.0.0.0
requirepass 123456 

9.2、filebeat配置输出到redis

output.redis:
hosts: ["192.168.31.71:6379"]
password: "123456"
key: "filebeat"
db: 0
datatype: "list" 

9.3、检查redis是否有数据

# redis
-cli 
-a 123456
127.0.0.1:6379> keys *
1) "filebeat"

9.4、logstash配置从redis里读

input {
redis {
host => "192.168.31.71"
port => 6379
password => "123456"
key => "filebeat"
db => 0
data_type => "list" 
}
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
对于部署ELKElasticsearch, Logstash, Kibana)7.16.1的Docker环境,可以按照以下步骤进行操作: 1. 安装Docker和Docker Compose:确保系统上已经安装了Docker和Docker Compose。可以通过官方文档或适用于您操作系统的其他资源来完成安装。 2. 创建Docker Compose文件:创建一个名为docker-compose.yml的文件,并添加以下内容: ```yaml version: '3' services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.16.1 environment: - discovery.type=single-node ports: - 9200:9200 - 9300:9300 networks: - elk logstash: image: docker.elastic.co/logstash/logstash:7.16.1 volumes: - ./logstash/config:/usr/share/logstash/config - ./logstash/pipeline:/usr/share/logstash/pipeline ports: - 5000:5000 networks: - elk kibana: image: docker.elastic.co/kibana/kibana:7.16.1 environment: - ELASTICSEARCH_HOSTS=http://elasticsearch:9200 ports: - 5601:5601 networks: - elk networks: elk: ``` 3. 创建配置文件和管道文件夹:在与docker-compose.yml相同的目录中创建名为`logstash/config`和`logstash/pipeline`的文件夹。 4. 配置Logstash:在`logstash/config`文件夹中创建一个名为`logstash.yml`的文件,并添加以下内容: ```yaml http.host: "0.0.0.0" ``` 5. 创建Logstash管道:在`logstash/pipeline`文件夹中创建一个名为`pipeline.conf`的文件,并根据您的需求配置Logstash的管道。例如,以下是一个简单的例子: ```conf input { tcp { port => 5000 codec => json } } output { elasticsearch { hosts => ["elasticsearch:9200"] index => "logs-%{+YYYY.MM.dd}" } } ``` 6. 启动ELK容器:在终端中导航到包含docker-compose.yml文件的目录,并运行以下命令启动容器: ```shell docker-compose up -d ``` 7. 等待一段时间,直到容器启动完毕。然后,您可以通过浏览器访问Kibana界面,地址为`http://localhost:5601`,查看和分析日志。 请注意,这只是一个基本的ELK部署示例,您可以根据自己的需求进行进一步的配置和定制化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

运维那些事~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值