2. 整体方案规划
最后更新于:2022-04-02 07:47:22
### 拓扑图
### 软件选型
#### 文件数据收集(Filebeat)
- Nginx、Tomcat访问日志(Json)(单行)
- Nginx错误日志(单行)
- Tomcat日志(多行)
- JAVA程序日志(单行)
- JAVA程序日志(多行)
- 系统日志(messages)(单行)
- 系统日志(lastlog)(单行)
#### 缓冲消息队列(消费)
- Redis
- Kafka(待补充)
#### 数据处理(转发)
- Logstash
#### 数据检索(存储)
- Elasticsearch
#### 数据展示
- Kibana
### 基础环境
#### Web01
| 收集对象 | 位置 |
| :------------: | :------------: |
| 系统日志 | /var/log/messages |
| 系统日志 | /var/log/lastlog |
| Nginx访问日志 | /usr/local/nginx/logs/*_access.log |
| Nginx错误日志 | /usr/local/nginx/logs/error.log |
|Tomcat访问日志 |/usr/local/tomcat1/logs/ding_access.*.log |
|Java程序输出日志 | /usr/local/tomcat1/logs/ding_Info.log|
|Java程序错误日志 | /usr/local/tomcat1/logs/ding_Error.log|
#### ELK
| 服务 | 配置 |
| :------------: | :------------: |
| Elasticsearch | /etc/elasticsearch/elasticsearch.yml |
| Logstash | /etc/logstash/conf.d/*.conf |
| Kibana | /etc/kibana/kibana.yml |
#### 硬件配置
ES写入数据时主要消耗CPU和磁盘IP,磁盘越快越好(RAID0或RAID10)
Logstash写入数据时,主要消耗CPU
#### 常用Logstash插件
- **Json过滤**
处理Nginx、Tomcat已经Json化的访问日志
- **Grok过滤**
处理非结构化的日志,比如IIS日志,MySQL满日志或原始的Nginx日志
- **Mutate过滤**
处理字段的合并、拆解、转换,比如分解Nginx中的request字段,分解为请求方法,请求URL和http版本
- **Geoip过滤**
结合Maxmind的开源GeoLite2数据库,解析IP地址,生成GEO相关字段,用于地图类展示
- **Data过滤**
对时间进行匹配转换
- **Useragent过滤**
拆解日志中的useragent字段
- **Drop过滤**
根据条件,删除数据
### 已知的问题
#### 1.性能瓶颈
Elasticsearch对磁盘IO要求很高,建议数据放在当读分区中,可以考虑用多块磁盘,建立RAID0或RAID0+1,缓解数据查询缓慢的问题
#### 2.索引的命名规则
Elasticsearch默认会将Geoip过滤后的location字段转换为geo_point类型,但是前提是索引要以logstash-开头,否则不转换
#### 3.字符集乱码
Filebeat中设置encoding:UTF-8
如未使用Filebeat,Logstash设置codec => plain{charset=>"UTF-8"}
#### 4.Logstash使用不同的端口,接收不同日志数据
拆分配置文件,避免同一个Logstash配置文件过于庞大
#### 4.一些感悟
1.Nginx的访问日志和Tomcat的访问日志并不能很好的关联
2.动态请求的字符串,在Tomcat中获取
';