日志审计系统Agent项目创建——获取Linux的ip并将得到的日志插入数据库中(Linux版本)

上一篇文章可以直接展示系统在运行过程中的日志,读取日志文件https://blog.csdn.net/wjl990316fddwjl/article/details/135553685

如何将得到的日志插入数据表中,进行更可观的展示?

1、创建表格并执行,可以看到数据库已经创建好了表格,在这里我们来将日志数据进行插入

cpp 复制代码
//创建t_log日志表
    string sql = "CREATE TABLE IF NOT EXISTS `t_log` (\
        `id` INT AUTO_INCREMENT,\
        `ip` VARCHAR(16),\
        `log` VARCHAR(2048),\
        `log_time` datetime,\
         PRIMARY KEY(`id`))";
    my->Query(sql.c_str());

2、写一个插入数据库的函数

cpp 复制代码
//日志写入数据库
	bool SaveLog(std::string log);

2.1、函数编写

cpp 复制代码
bool XAgent::SaveLog(std::string log)
{

    cout << log << endl;
    XDATA data;
    data["log"] = log.c_str();
    //获取本机的ip地址
    //遍历网卡
    data["ip"] = local_ip.c_str();
    //插入时间,用mysql now函数  @表示字段内容不加引号,@会自动去除
    data["@log_time"] = "now()";
    my->Insert(data, "t_log");
    return true;
}

如何使用linux的ip而不是使用127.0.0.1呢?这个代码直接调用一下

cpp 复制代码
//遍历网卡,获取本机的ip
	static std::string GetLocalIP();
cpp 复制代码
//获取本机地址
std::string XAgent::GetLocalIP()
{
    char ip[16] = { 0 };
#ifndef _WIN32
    ifaddrs* ifadd = 0;
    if (getifaddrs(&ifadd) != 0)return "";
    //遍历地址
    ifaddrs* iter = ifadd;
    while (iter!=NULL)
    {
        //ipv4
        if(iter->ifa_addr->sa_family==AF_INET)
        if (strcmp(iter->ifa_name, "lo") != 0)//去掉回环地址,去掉127.0.0.1
        {
            //转换整型ip为字符串
           
            void* tmp = &((sockaddr_in*)iter->ifa_addr)->sin_addr;
            inet_ntop(AF_INET, tmp, ip, INET_ADDRSTRLEN);
            break;
        }
        iter = iter->ifa_next;
    }
    freeifaddrs(ifadd);
#endif // !_WIN32
    return ip;
}

3、在这里直接将插入函数放进主循环里面,也就是上一篇的

cpp 复制代码
void XAgent::Main()
{
    // 读取最新日志
    while (true)
    {
        // 将文件指针移动到上次读取的位置
        fseek(fp, lastPosition, SEEK_SET);

        // 读取新添加的内容
        char buffer[1024];
        while (fgets(buffer, sizeof(buffer), fp) != nullptr)
        {
            SaveLog(buffer);
        }

        // 更新 lastPosition 到文件末尾,以便下次读取新内容
        lastPosition = ftell(fp);

        // 等待一段时间再继续检查文件
        this_thread::sleep_for(chrono::milliseconds(100));
    }
}

4、运行,发现日志文件被插入数据库中

相关推荐
Freak嵌入式1 分钟前
版本混乱 / 依赖缺失?uPyPi:MicroPython 版 PyPI,彻底解决库管理混乱
linux·服务器·数据库·单片机·嵌入式硬件·性能优化·依赖倒置原则
Elastic 中国社区官方博客6 分钟前
Elastic 和 OpenAI 合作,将前沿智能引入非结构化企业数据
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai
云飞云共享云桌面12 分钟前
SolidWorks—天津智能装备工厂1台高配主机共享给10个研发用
运维·服务器·自动化·汽车·制造
云和恩墨15 分钟前
数据库一体机zData X 3.6.0以“性能、成本、韧性、生态”强化数据库基础设施价值主张
数据库
苍狗T29 分钟前
LVS相关知识总结
linux·运维·服务器·lvs
灯澜忆梦35 分钟前
【MySQL7】多表查询
数据库·sql
Qlittleboy1 小时前
tp5网站链接不上slqserver,计算机积极拒绝了链接
数据库·sql
lightqjx1 小时前
【Linux系统】基础 IO
linux·c语言·重定向·缓冲区·文件io·文件的系统调用
我星期八休息1 小时前
扩展— TCP 全连接队列与 tcpdump 抓包
linux·服务器·开发语言·前端·网络·tcp/ip·tcpdump
行业研究员2 小时前
腾讯云数据库:团队知识统一检索实践
数据库·云计算·腾讯云·腾讯云数据库·团队知识