单节点版ELK日志服务搭建
# ELK简介
ELK 是ElasticSearch开源生态中提供的一套完整日志收集、分析以及展示的解决方案,是三个产品的首字母缩写,分别是ElasticSearch、Logstash 和 Kibana。
ElasticSearch 是一个分布式、Restful 风格的搜索和数据分析引擎。
Logstash 是服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到诸如 ElasticSearch 等存储库中。
Kibana 则可以让用户在 ElasticSearch 中使用图形和图表对数据进行可视化。
搭建elk时,要保证其对应的版本好一致,否则会出现未知的错误
# 搭建ElasticSearch
- 下载
https://www.elastic.co/cn/downloads/elasticsearch
- 上传并解压
tar -xzvf elasticsearch-xxx.tar.gz
- 创建专属es用户
root用户不能直接启动Elasticsearch,所以需要创建一个专用用户,来启动ES
# 创建用户
useradd user-es
# 分配权限
chown user-es:user-es -R /usr/local/elasticsearch-7.13.2
2
3
4
5
6
- 修改配置
- 修改ES的jdk依赖
es和jdk是一个强依赖的关系,所以当我们在新版本的ElasticSearch压缩包中包含有自带的jdk,但是当我们的Linux中已经安装了jdk之后,就会发现启动es的时候优先去找的是Linux中已经装好的jdk,此时如果jdk的版本不一致,就会造成jdk不能正常运行
(1)进入bin目录,并编辑启动文件
cd /usr/local/elasticsearch-7.13.2/bin
vim ./elasticsearch
2
3
(2)添加以下代码
############## 添加配置解决jdk版本问题 ##############
# 将jdk修改为es中自带jdk的配置目录
export JAVA_HOME=/usr/local/elasticsearch-7.13.2/jdk
export PATH=$JAVA_HOME/bin:$PATH
if [ -x "$JAVA_HOME/bin/java" ]; then
JAVA="/usr/local/elasticsearch-7.13.2/jdk/bin/java"
else
JAVA=`which java`
fi
2
3
4
5
6
7
8
9
10
11
- 修改ES核心配置
(1)编辑config目录中的yml文件
vim /usr/local/elasticsearch-7.13.2/config/elasticsearch.yml
(2)修改以下配置
# 修改数据和日志目录
# 数据目录位置
path.data: /home/新用户名称/elasticsearch/data
# 日志目录位置
path.logs: /home/新用户名称/elasticsearch/logs
#修改绑定的ip允许远程访问
#默认只允许本机访问,修改为0.0.0.0后则可以远程访问
# 绑定到0.0.0.0,允许任何ip来访问
network.host: 0.0.0.0
#初始化节点名称
cluster.name: elasticsearch
node.name: es-node0
cluster.initial_master_nodes: ["es-node0"]
#修改端口号(根据需要)
http.port: 19200
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- 启动和停止
- 启动
#常规启动
./bin/elasticsearch
#后台启动
./bin/elasticsearch -d
2
3
4
5
- 停止
#根据端口号查询对应Pid
netstat -tuln | grep <port>
#杀死进程
kill -9 es_pid
2
3
4
5
- 检查是否启动成功/能否访问
在浏览器输入http://es_node_ip:9200/
检查ES是否启动成功.
# 安装插件
# IK 分词器
- 下载
https://github.com/medcl/elasticsearch-analysis-ik
找到与ES版本对应的IK,然后下载其中的zip包(非source包)
- 上传并解压
# 解压到目标文件夹
# -o 表示unzip执行后覆盖原有的文件
# -d 表示指定的目标文件夹
unzip -o es-ik-xxxx.zip -d ./tmp
2
3
4
5
- 将解压后的ik文件夹放到es/plugins/目录中
mv ./tmp/ik/ /usr/local/es/plugins/
重启ES
测试ik是否成功
# ik_smart :最少切分算法
# ik_max_word :最细粒度划分
GET _analyze
{
"analyzer": "ik_smart",
"text": """为啥他们总是会说一些"何不食肉糜乎"的说法?"""
}
2
3
4
5
6
7
8
# 遇到的问题&&解决办法
error: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]. 问题原因:因为系统限制了每个进程能映射的虚拟内存区域数量的最大值,而 Elasticsearch 需要超过此限制
- 临时更改
sudo sysctl -w vm.max_map_count=262144
- 永久修改 (1)编辑 /etc/sysctl.conf 文件并将以下行添加到文件底部:
vm.max_map_count=262144
(2)保存并重新加载配置
sudo sysctl -p
# 参考链接
- https://blog.csdn.net/smilehappiness/article/details/118466378
- https://blog.csdn.net/wpc2018/article/details/121156880
# 搭建Kibana
- 下载
https://www.elastic.co/cn/downloads/kibana
- 上传并解压
tar -xzvf kibana-xxxx.tar.gz
- 修改配置文件 (1) 编辑config目录下yml文件
vim /home/elk/kibana/config/kibana.yml
2
(2) 修改如下配置
# 以下为关键项
# 默认值: 5601 Kibana 由后端服务器提供服务,该配置指定使用的端口号。
server.port: 5601
# 默认值: "localhost" 指定后端服务器的主机地址。
server.host: 127.0.0.1
# 显示中文
i18n.locale: "zh-CN"
# ES服务ip及端口
elasticsearch.hosts: ["http://localhost:9200"]
2
3
4
5
6
7
8
9
10
11
12
13
创建专用kibana用户,或使用已有非root用户。(参考es相关步骤)
启动和停止
- 启动
#常规启动
./bin/kibana
#后台启动
nohup ./bin/kibana &
2
3
4
5
- 停止
#根据端口号查询对应Pid
netstat -tuln | grep <port>
#杀死进程
kill -9 kibana_pid
2
3
4
5
- 外部访问
防火墙开放对应端口
浏览器访问
http://kibana_ip:port/
# 参考链接
https://developer.aliyun.com/article/789870
# 搭建Logstash
- 下载
https://artifacts.elastic.co/downloads/logstash/
- 上传并解压
tar -xzvf logstash-xxx.tar.gz
创建专属用户或使用非root用户(参考es搭建步骤)
修改配置
(1) 修改config目录下yml文件
vim ./config/logstash.yml
(2) 修改以下配置
# 配置指向logstash的数据采集配置文件
# 配置后运行logstash 时可不用指定conf文件
path.config: config/conf.d/*.conf
2
3
- logstash数据源采集配置文件示例
input {
file {
path => "/usr/local/nginx/logs/access.log"
type => "nginx"
}
}
output {
elasticsearch {
hosts => ["http://192.168.0.200:9200"]
index => "test-nginx-logs-%{+YYYY.MM.dd}"
}
}
2
3
4
5
6
7
8
9
10
11
12
13
- 配置完成后启动logstash
# 指定数据源配置文件
./logstash -f input_out.conf
# 如果已经在步骤4配置了"path.config",可执行
./logstash
## 后台启动
./logstash > ./logs/xxx.log &
2
3
4
5
6
7
8
9
10
- 停止
#根据端口号查询对应Pid
netstat -tuln | grep <port>
#杀死进程
kill -9 es_pid
2
3
4
5
# 参考链接
https://www.jianshu.com/p/61d40f772c4a
https://blog.csdn.net/shy871/article/details/118309754